Membatalkan tugas dengan berkesan jika await
digunakan
Apabila bekerja dengan tugasan WinRT, anda boleh cuba menamatkan tugasan menggunakan kaedah CancelNotification
. Walau bagaimanapun, kod ini mungkin menyebabkan hasil yang tidak dijangka kerana tugasan itu sebenarnya akan terus diselesaikan walaupun anda cuba membatalkannya. Untuk mengatasi had ini dan benar-benar menghentikan tugas apabila dibatalkan, ikut langkah berikut:
Sepadukan fungsi pembatalan ke dalam kaedah anda dengan menghantar objek CancellationToken
. Pastikan setiap kaedah yang boleh ditamatkan secara berkala mengesahkan token ini.
Coretan kod yang diubah suai dengan berkesan membatalkan tugas seperti yang dijangkakan:
<code class="language-csharp">private async Task TryTask() { CancellationTokenSource source = new CancellationTokenSource(); source.CancelAfter(TimeSpan.FromSeconds(1)); Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token); try { await task; } catch (OperationCanceledException) { // 处理取消 } } private int slowFunc(int a, int b, CancellationToken cancellationToken) { string someString = string.Empty; for (int i = 0; i < 1000000; i++) { someString += i.ToString(); cancellationToken.ThrowIfCancellationRequested(); // 定期检查取消请求 } return a + b; }</code>
Dengan menggunakan blok await
dalam tindakan try/catch
, anda boleh mengendalikan OperationCanceledException
dan mengambil tindakan yang sesuai untuk mengurangkan kesan pembatalan tugas.
Atas ialah kandungan terperinci Bagaimana cara membatalkan tugas `menunggu ing ing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!