Rumah >pembangunan bahagian belakang >C++ >Kenapa saya tidak boleh menggunakan pengubah 'Async' pada kaedah utama aplikasi konsol?
Main
: Penyelesaian async
Cabaran: pengaturcaraan asynchronous, menggunakan kata kunci , tidak disokong secara langsung dalam kaedah async
aplikasi konsol lama. Keterbatasan ini menghalang pelaksanaan kod asynchronous secara langsung dalam titik masuk aplikasi. Main
Resolusi:
Beberapa penyelesaian yang membolehkan operasi tak segerak dalam kaedah, bergantung kepada persekitaran pembangunan anda: Main
1. Visual Studio 2017 Update 3 dan kemudian:
Versi Modern Visual Studio (2017 Update 3 dan kemudian) Sokongan langsung async
kaedah. Cukup tukar jenis pulangan kaedah Main
anda ke Main
atau Task
: Task<T>
<code class="language-csharp">class Program { static async Task Main(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
2. Menyekat thread utama (untuk studio visual yang lebih tua):
Jika anda menggunakan versi Visual Studio yang lebih tua, anda boleh melaksanakan kod tak segerak dengan secara eksplisit menyekat benang utama sehingga operasi tak segerak selesai:
<code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>Pendekatan ini memanggil kaedah penolong
(async
) dan menggunakan MainAsync
untuk menunggu siapnya. GetAwaiter().GetResult()
3. Memanfaatkan konteks asynchronous (mis., Asyncex):
Untuk aliran kawalan asynchronous yang lebih mantap, pertimbangkan untuk menggunakan perpustakaan seperti. Ini memberikan konteks tak segerak untuk gelung utama anda: 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) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
menguruskan pelaksanaan tak segerak dalam konteks yang berdedikasi. AsyncContext.Run
aplikasi konsol anda, meningkatkan kecekapan dan respons. Main
Atas ialah kandungan terperinci Kenapa saya tidak boleh menggunakan pengubah 'Async' pada kaedah utama aplikasi konsol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!