.NET Core 是否支持异步控制台应用程序? [英] Are async console applications supported in .NET Core?

查看:27
本文介绍了.NET Core 是否支持异步控制台应用程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在某个时间点,CoreCLR 支持异步主入口点.请参阅 http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html

At some point in time the CoreCLR supported async main entry points. See http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html

然而,以下两个程序都无法在 .NET Core RTM 中运行

However both the following programs are not working in .NET Core RTM

using System;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            await Task.Delay(1000);
            Console.WriteLine("Hello World!");
        }
    }
}

using System;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    public class Program
    {
        public async Task Main(string[] args)
        {
            await Task.Delay(1000);
            Console.WriteLine("Hello World!");
        }
    }
}

这两个都失败并出现错误:

These both fail with the error:

错误 CS5001:程序不包含适合入口点的静态Main"方法

error CS5001: Program does not contain a static 'Main' method suitable for an entry point

.NET Core RTM 是否支持异步控制台应用程序?

Are async console applications supported in .NET Core RTM?

推荐答案

是的,.NET Core 2.0 开始支持 async Main 函数.

Yes, the async Main functions are supported since .NET Core 2.0.

dotnet --info
.NET Command Line Tools (2.0.0)

Product Information:
 Version:            2.0.0
 Commit SHA-1 hash:  cdcd1928c9

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  16.04
 OS Platform: Linux
 RID:         ubuntu.16.04-x64
 Base Path:   /usr/share/dotnet/sdk/2.0.0/

Microsoft .NET Core Shared Framework Host

  Version  : 2.0.0
  Build    : e8b8861ac7faf042c87a5c2f9f2d04c98b69f28d

在 C# 7.1 版中引入了对 async Main 函数的支持.但是,此功能不是开箱即用的.要使用此功能,您需要在 .csproj 文件中明确指定 C# 版本 7.1,或者通过包含

The support for the async Main functions is introduced in C# version 7.1. However, this functionality is not available out of the box. To make use of this feature you need explicitly specify the C# version 7.1 in your .csproj file, either by including

<LangVersion>latest</LangVersion>

或由

<LangVersion>7.1</LangVersion>

以 ASP.NET core 2.0 项目为例:

For example for the ASP.NET core 2.0 project:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
  </ItemGroup>
</Project>

其中 Main 函数可以重写如下:

where the Main function can be rewritten as following:

using System.Threading.Tasks;

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

参考文献:

  1. C#7 系列,第 2 部分:异步主程序
  2. 冠军异步主"(C# 7.1)

这篇关于.NET Core 是否支持异步控制台应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆