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
class Program { static async Task Main(string[] args) { // Your asynchronous code here... } }
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
using Nito.AsyncEx; class Program { static void Main(string[] args) { AsyncContext.Run(() => MainAsync(args)); } static async void MainAsync(string[] args) { // Your asynchronous code here... } }
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()
class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { // Your asynchronous code here... } }
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!