在某个时间点,CoreCLR支持异步主入口点。参见 blog.stephencleary/2015/03/async -console-apps-on-net-coreclr.html
At some point in time the CoreCLR supported async main entry points. See blog.stephencleary/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!"); } } }这些都因错误而失败:
错误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(); } ...参考文献:
更多推荐
.NET Core是否支持异步控制台应用程序?
发布评论