代码之家  ›  专栏  ›  技术社区  ›  xzk

C#-在主函数中使用异步

  •  2
  • xzk  · 技术社区  · 6 年前

    根据这篇文章,排名第一的答案建议我们可以直接在main中使用async。还是我误会了?

    Can't specify the 'async' modifier on the 'Main' method of a console app

    我的主课:

    public class Program
    {
        public static async Task Main(string[] args)
        {
            ApproveEvents ap = new ApproveEvents();
            List<MyModel> result = new List<MyModel>();
            result = await ap.ApproveAsync();
            if (result.count > 0)
            {
                //do something here
            }
    
        }
    }
    

    而且,

    public class ApproveEvents
    {
        public async Task<List<MyModel>> ApproveAsync()
        {
            //blah blah
        }
    }
    

    Visual Studio 2017正在抱怨 no Main method for an entry point .

    我该如何解决这个问题?

    2 回复  |  直到 6 年前
        1
  •  5
  •   AlexK    6 年前

    async Task Main 在中可用 C# 7.1 . 你可以换成 build properties (默认为最新的主版本,即7.0)

        2
  •  2
  •   Barr J    6 年前

    我建议你看看这个 topic 为了帮助你,这正好说明了你的问题。

    它说:

    如我上面所示,如果您希望在 entrypoint方法,您需要应用一些解决方法,因为 以下入口点定义无效:

    public static async Task Main(string[] args) 
    { 
        await BuildWebHost(args).RunAsync(); 
    }
    

    为了完成此项工作,您需要执行以下解决方法:

    public static void Main(string[] args)
    {     
        BuildWebHost(args).RunAsync().GetAwaiter().GetResult();
    }
    

    或打电话 wait() 在任务对象本身上:

    public static void Main(string[] args)
    {
        BuildWebHost(args).RunAsync().Wait();
    }
    

    C#7.1中有一个有效入口点列表, 这是最新的名单 :

    public static void Main();
    public static int Main();
    public static void Main(string[] args);
    public static int Main(string[] args);
    public static Task Main();
    public static Task<int> Main();
    public static Task Main(string[] args);
    public static Task<int> Main(string[] args);