C#-在Main函数中使用Async

时间:2018-08-01 06:40:46

标签: c# visual-studio

根据这篇文章,获得最高投票的答案表明我们可以直接在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 个答案:

答案 0 :(得分:5)

git cherry-pick <commit-sha>C# 7.1中可用。您可以在build properties中进行更改(默认值为最新的主要版本7.0)

答案 1 :(得分:2)

我建议您查看此topic来为您提供帮助,它可以直接解决您的问题。

它说:

  

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

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);