.NET কোর এ এসিঙ্ক কনসোল অ্যাপ্লিকেশনগুলি সমর্থিত?


113

কোনও এক সময়ে কোরসিএলআর এসিঙ্কের প্রধান প্রবেশ পয়েন্টগুলিকে সমর্থন করেছিল। Http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html দেখুন

তবে নিম্নলিখিত দুটি প্রোগ্রামই নেট নেট আরটিএম-তে কাজ করছে না

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: প্রোগ্রামে একটি এন্ট্রি পয়েন্টের জন্য উপযুক্ত একটি স্ট্যাটিক 'মেইন' পদ্ধতি থাকে না

.NET কোর আরটিএম এ অ্যাসিঙ্ক কনসোল অ্যাপ্লিকেশনগুলি সমর্থিত?



6
@ এসভিক আসলে অ্যাসিঙ্ক মেইন সমর্থন সি # 7.1 এ যুক্ত হয়েছে, ডকস.মাইক্রোসফটকম / en - us / dotnet / csharp / what - new/… - আপনার ভিজ্যুয়াল স্টুডিও 2017 প্রকল্পে, প্রকল্পের বৈশিষ্ট্যগুলিতে যান -> বিল্ড -> উন্নত তারপর, 7.1 (বা উচ্চতর) আপনার ভাষার সংস্করণটি পরিবর্তন
alv

1
properties -> build -> advanced -> language versionডিবাগ এবং রিলিজ বিল্ড প্রকারগুলির জন্য পরিবর্তন করতে ভুলবেন না, অন্যথায় প্রকল্প প্রকাশে ব্যর্থ হবে।
চিহ্নিত করুন

2
আমার প্রকল্পে, 'অ্যাসিঙ্ক মেইন' কেবল তখনই কাজ করে যদি আমি শূন্যতার পরিবর্তে টাস্ক ব্যবহার করি। শূন্যতার সাথে আমি 'CS5001' ত্রুটি পেয়েছি।
ফিলিপ দেভেজা

উত্তর:


175

হ্যাঁ, async Mainফাংশনগুলি তখন থেকে সমর্থিত .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

async Mainফাংশনগুলির জন্য সমর্থন সি # সংস্করণ 7.1 এ প্রবর্তিত হয়েছে। তবে এই কার্যকারিতাটি বাক্সের বাইরে পাওয়া যায় না। এই বৈশিষ্ট্যটি ব্যবহার করার জন্য আপনাকে নিজের .csprojফাইলটিতে সি # সংস্করণ 7.1 স্পষ্টভাবে উল্লেখ করতে হবে, অন্তর্ভুক্ত করে

<LangVersion>latest</LangVersion>

অথবা দ্বারা

<LangVersion>7.1</LangVersion>

উদাহরণস্বরূপ এএসপি.নেট কোর 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. সি # 7 সিরিজ, পর্ব 2: অ্যাসিঙ্ক মেইন
  2. চ্যাম্পিয়ন "অ্যাসিঙ্ক মেইন" (সি # 7.1)

6
আপনি প্রকল্পের বৈশিষ্ট্যে ভাষা সংস্করণ (এখন?) সেট করতে পারেন; বিল্ড -> উন্নত -> ভাষা সংস্করণ।
নিক

ডিফল্টরূপে এই বিকল্পটির মান "সর্বশেষ প্রধান সংস্করণ" রয়েছে এবং এটি 7.0 এর সমান, 7.1 নয়! এটি ম্যানুয়ালি পরিবর্তন করুন।
ইউজিন হোজা

1
প্রথম রেফারেন্স লিঙ্কটি মারা গেছে; : এখানে wayback মেশিন ক্যাশে এর web.archive.org/web/20190118084407/https://...
kristianp

1
লিংক মারা গেছে কারণ মাইক্রোসফট কর্মীদের তাদের ব্লগে নিজে দৃশ্যত মাইগ্রেট করা প্রয়োজন: social.technet.microsoft.com/Forums/en-US/...
kristianp

50

আপডেট : অ্যাসিঙ্ক মেইন স্থানীয়ভাবে সি # 7.1 দ্বারা সমর্থিত! অ্যাভজেনির উত্তর দেখুনউপরে ।

আমি উত্তরোত্তর জন্য নীচের কাজটি রাখব, তবে এটি আর দরকার নেই। async mainসহজ উপায়।


নিক যেমন বলেছিল, এর জন্য সমর্থন সরানো হয়েছে। এটি আমার পছন্দসই কাজ:

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(সমকালীনভাবে অবরুদ্ধ করা) এর সমান , তবে এটি ব্যতিক্রমকে আনল্যাপ করে বলেই অগ্রাধিকার দেওয়া হয়

async Main()ভবিষ্যতে C #: csharplang # 97 এর সংস্করণে যুক্ত করার প্রস্তাব রয়েছে


10

অ্যাসিঙ্ক এন্ট্রি পয়েন্টগুলির জন্য সমর্থন কিছুক্ষণ আগে সরানো হয়েছিল।

অ্যাসপেট / ঘোষণার গিথুব এ এই সমস্যাটি দেখুন ।

আমরা ডেস্কটপ সিএলআর দিয়ে প্রবেশ পয়েন্ট শব্দার্থের একীকরণের দিকে এগিয়ে যাওয়ার সিদ্ধান্ত নিয়েছি।

আরসি 1 এ অপ্রচলিত:

Async / টাস্ক <> প্রধান জন্য সমর্থন।

এন্ট্রি পয়েন্ট টাইপ ইনস্টল করার জন্য সমর্থন (প্রোগ্রাম)।

প্রধান পদ্ধতিটি পাবলিক স্ট্যাটিক অকার্যকর মেইন বা পাবলিক স্ট্যাটিক ইন মেইন হওয়া উচিত।

প্রোগ্রাম শ্রেণীর নির্মাতা এবং প্রধান পদ্ধতিতে ইনজেকশন নির্ভরকরণের জন্য সমর্থন।

পরিবর্তে প্ল্যাটফর্ম সার্ভিস এবং সংকলন পরিষেবাগুলি ব্যবহার করুন।

আইপ্লিকেশনএনোমায়ারনমেন্ট, আইরুনটাইম এনভায়রনমেন্ট, আইএএস্পলিউশন লোডার কনটেনার, আইএএসবোলজডোড কনটেক্সট অ্যাকসেসর, আইলিবারি ম্যানেজার মাইক্রোসফ্ট.এক্সটেনশনস.প্ল্যাটফর্মঅ্যাবস্ট্রাকশনস.প্ল্যাটফর্ম সার্ভিসেস.ডিফল্ট স্ট্যাটিক অবজেক্টে যেতে।

আইলিবেরিএক্সপোরটারে যেতে, আইসিম্পাইলারঅপশনস প্রোভাইডারটি মাইক্রোসফ্ট ব্যবহার করে x এক্সটেনশানস C সংকলনআর্বস্ট্রাকশনস omp

কল কনটেক্সটস সার্ভিসলোকেটারের জন্য সমর্থন। পরিবর্তে প্ল্যাটফর্ম সার্ভিস এবং সংকলন পরিষেবাগুলি ব্যবহার করুন।

উপরের মতই.

এগুলি আরসি 2 এ সরানো হবে: # 106

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.