3

根据这篇文章,投票最多的答案表明我们可以直接在 main 中使用 async。还是我误解了?

无法在控制台应用程序的“主要”方法上指定“异步”修饰符

我的主要课程:

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.

我应该如何解决这个问题?

4

2 回答 2

6

async Task MainC# 7.1中可用。您可以在构建属性中更改它(默认为最新的主要版本,即 7.0)

于 2018-08-01T06:49:50.657 回答
2

我建议您查看此主题以帮助您,它直接解决了您的问题。

它说:

如上所示,如果要在入口点方法中等待异步操作,则需要应用一些变通方法,因为以下入口点定义无效:

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);
于 2018-08-01T06:50:25.663 回答