Kod Asynchronous Running dalam kaedah utama C#: Workarounds untuk Batasan Async
Pengubahsuaian tidak disokong secara langsung pada kaedah async
dalam versi lama C#. Walau bagaimanapun, beberapa teknik membenarkan operasi tidak segerak dalam titik masuk aplikasi konsol anda. Main
Pendekatan Moden: Async Main (Visual Studio 2017 Update 3 dan kemudian)
Penyelesaian yang paling mudah, jika persekitaran pembangunan anda menyokongnya, adalah untuk mengisytiharkan sebagai Main
dan mengembalikan async
: Task
<code class="language-csharp">class Program { static async Task Main(string[] args) { // Your asynchronous code here... } }</code>
menggunakan konteks tak segerak (untuk versi Visual Studio yang lebih tua)
Untuk versi Visual Studio yang lebih tua, atau jika anda lebih suka tidak menggunakan kaedah async
, memanfaatkan perpustakaan konteks tak segerak. Main
dari pakej AsyncContext
nuget adalah pilihan yang popular: Nito.AsyncEx
<code class="language-csharp">using Nito.AsyncEx; class Program { static void Main(string[] args) { AsyncContext.Run(() => MainAsync(args)); } static async void MainAsync(string[] args) { // Your asynchronous code here... } }</code>
menyekat benang utama (kurang ideal)
Walaupun berfungsi, secara langsung menghalang benang utama sehingga selesai operasi asynchronous pada umumnya kurang disukai kerana isu -isu yang berpotensi. Pendekatan ini menggunakan: GetAwaiter().GetResult()
<code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { // Your asynchronous code here... } }</code>
Nota penting: Menggunakan adalah penting. Elakkan GetAwaiter().GetResult()
atau mengakses harta Wait()
secara langsung, kerana ini boleh menutupi pengecualian dan membawa kepada isu-isu yang lebih keras-ke-debug. Result
betul menyebarkan pengecualian. AggregateException
Atas ialah kandungan terperinci Bagaimanakah saya boleh menjalankan kod asynchronous dalam kaedah utama aplikasi C# Console?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!