【问题标题】:Program does not contain a static 'main' method suitable for an entry point async await程序不包含适用于入口点异步等待的静态“主”方法
【发布时间】:2018-04-13 12:24:39
【问题描述】:

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

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

【问题讨论】:

  • 您的代码既没有显示static async Task Main(),也没有显示static void Main()!您只有一个非静态Main 和一个static async void Run。只需将您的Main 声明为static 或将您的Run 方法重命名为Main,如果这是您打算用作Main 的方法
  • 使用await Run(); 并修复初始错误。

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


【解决方案1】:

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() 交谈。

【讨论】:

  • 已添加顶级入口点异步支持。我从来不知道。投赞成票。
  • @spender 是的,这是 C# 7.1 的特性
  • @spender 在 C# 7 中出来了 :)
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 2017-01-22
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
相关资源
最近更新 更多