程序不包含静态的主要'适用于入口点异步等待的方法

时间:2018-04-13 12:24:40

标签: c# asp.net-core .net-core

我有问题,我使用async await编写了简单的代码,但编译器检测到错误,我在stackoverflow中发现解决问题以更改lang版本我的项目解决方案看起来:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<LangVersion>7.2</LangVersion>
</PropertyGroup>
</Project>

但错误仍然存​​在。 然后我将项目构建中的语言c#版本更改为7.2,但没有任何事情发生。

public сlass Program
{
    public void Main(string[] args)
    {
        Run();
    }

    private static async Task<int> AsyncDoItAsync()
    {
        HttpClient client = new HttpClient();
        Task<String> message = client.GetStringAsync("http://mdsm.microsoft.com");
        while (!message.IsCompleted)
        {
            DoWhenChechink();
        }
        string url = await message;
        return url.Length;
    }
    public static void DoWhenChechink()
    {
        Console.WriteLine("Waiting");
        Thread.Sleep(75);
    }
    private static async void Run() {
        int a = await AsyncDoItAsync();
    }
}

1 个答案:

答案 0 :(得分:3)

Main方法必须为static,因此请public static void Main(string[] args)。但是,您的Runasync void,所以现在它会立即退出。相反,您的Main方法应该 - 如果使用最新的编译器 - 使用:

public static Task Main(string[] args) => AsyncDoItAsync();

然后知道等待(等待)完成。您可以将其写为:

public static async Task Main(string[] args) => await AsyncDoItAsync();

但这并没有真正添加任何东西。同样,这里Run方法没有任何意义;您的Main方法也可以直接与AsyncDoItAsync()对话。