2016-06-30 4 views
36

कुछ समय पर CoreCLR ने async मुख्य प्रविष्टि बिंदुओं का समर्थन किया। देखें http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.htmlक्या एसिंक कंसोल अनुप्रयोग .NET कोर में समर्थित हैं?

हालांकि दोनों निम्न प्रोग्राम नेट कोर आरटीएम में काम नहीं कर रहे

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!"); 
     } 
    } 
} 

इन दोनों त्रुटि के साथ विफल:

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

async हैं कंसोल अनुप्रयोग .NET कोर आरटीएम में समर्थित है?

+4

ध्यान दें कि (https://github.com/dotnet/roslyn/ [ 'async Main' समर्थन वर्तमान के लिए # सी 7.0 की योजना बनाई है] ब्लॉब/मास्टर/docs/भाषा% 20Feature% 20Status.md)। – svick

+3

@svick वास्तव में async मुख्य समर्थन सी # 7.1, https://docs.microsoft में जोड़ा गया है।com/en-us/dotnet/csharp/whats-new/csharp-7-1 # async-main - अपने विजुअल स्टूडियो 2017 प्रोजेक्ट में, प्रोजेक्ट गुणों पर जाएं -> build -> उन्नत, फिर अपनी भाषा संस्करण 7.1 पर बदलें (या उच्चतर) – alv

+1

डीबग और रिलीज बिल्ड प्रकारों के लिए ''' गुण -> बिल्ड -> उन्नत -> भाषा संस्करण ''' को बदलने के लिए याद रखें, अन्यथा प्रकाशित प्रकाशन पर असफल हो जाएगा। – Mark

उत्तर

44

हाँ, async Main कार्यों .NET Core 2.0 के बाद से समर्थित हैं:

सी # के भविष्य के संस्करण के लिए async Main() जोड़ने के लिए एक प्रस्ताव है।

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 

async Main कार्यों के लिए समर्थन सी # संस्करण 7.1 में शुरू की है। हालांकि, यह कार्यक्षमता बॉक्स के बाहर उपलब्ध नहीं है। इस सुविधा से आप अपने .csproj फ़ाइल में सी # संस्करण 7.1 निर्दिष्ट स्पष्ट रूप से की जरूरत का उपयोग करने के लिए, या तो

<LangVersion>latest</LangVersion> 

या

<LangVersion>7.1</LangVersion> 

ASP.NET कोर 2.0 परियोजना के लिए उदाहरण के लिए द्वारा शामिल करके:

<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> 

जहां मुख्य समारोह निम्नलिखित के रूप में लिखा जा सकता है:

using System.Threading.Tasks; 

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

संदर्भ:

  1. C# 7 Series, Part 2: Async Main
  2. Champion "Async Main" (C# 7.1)
+3

csproj फ़ाइल में ' नवीनतम' जोड़ना बिल्कुल वही था जो मुझे चाहिए था। मैंने इसे अपने '' अनुभाग में रखा है। –

9

एसिंक प्रविष्टि बिंदुओं के लिए समर्थन कुछ समय पहले हटा दिया गया था।

एस्पनेट/घोषणा गिथब पर this issue देखें।

We decided to move towards unification of entry point semantics with desktop CLR.

Obsolete in RC1:

Support for async/Task<> Main.

Support for instantiating of entry point type (Program).

The Main method should be public static void Main or public static int Main.

Support for injecting dependencies into the Program class's constructor and Main method.

Use PlatformServices and CompilationServices instead.

To get to IApplicationEnvironment, IRuntimeEnvironment, IAssemblyLoaderContainer, IAssemblyLoadContextAccessor, ILibraryManager use Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default static object.

To get to ILibraryExporter, ICompilerOptionsProvider use the Microsoft.Extensions.CompilationAbstractions.CompilationServices.Default static object.

Support for CallContextServiceLocator. Use PlatformServices and CompilationServices instead.

Same as above.

These would be removed in RC2: #106

31

जैसा कि निक ने कहा, इसके लिए समर्थन हटा दिया गया था।

using System; 
using System.Threading.Tasks; 

namespace ConsoleApplication 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      MainAsync(args).GetAwaiter().GetResult(); 

      Console.ReadKey(); 
     } 

     public static async Task MainAsync(string[] args) 
     { 
      await Task.Delay(1000); 
      Console.WriteLine("Hello World!"); 
     } 
    } 
} 

GetAwaiter().GetResult() रूप .Wait (तुल्यकालिक अवरुद्ध) ही है, लेकिन is preferred क्योंकि यह अपवाद unwraps: यह मेरी पसंदीदा समाधान नहीं है। csharplang#97

+0

कामकाज नाट के लिए धन्यवाद! – Alex

संबंधित मुद्दे