Task<T>
untuk diselesaikan, tetapi dengan pertimbangan tambahan seperti waktu tamat dan pembatalan. Ini penting untuk pengalaman pengguna (memaparkan petunjuk atau mesej kemajuan selepas masa tertentu) dan pengurusan sumber (mencegah penyekatan tidak terbatas). Task<T>
menawarkan pemantauan tak segerak, tetapi tidak mempunyai fungsi masa tamat. Sebaliknya, Task.ContinueWith
menyediakan pengendalian masa tamat tetapi menghalang benang panggilan. Penyelesaian yang lebih elegan mengimbangi kedua -dua keperluan. Task.Wait
int timeoutMilliseconds = 1000; var task = SomeOperationAsync(); if (await Task.WhenAny(task, Task.Delay(timeoutMilliseconds)) == task) { // Task completed within the timeout period } else { // Timeout handling – e.g., display a message to the user }
int timeoutMilliseconds = 1000; var cancellationToken = new CancellationTokenSource(); var task = SomeOperationAsync(cancellationToken.Token); try { if (await Task.WhenAny(task, Task.Delay(timeoutMilliseconds, cancellationToken.Token)) == task) { // Task completed within timeout (or was canceled) await task; // Re-await to handle exceptions or cancellation } else { // Timeout or cancellation handling cancellationToken.Cancel(); // Explicit cancellation if needed } } catch (OperationCanceledException) { // Handle cancellation specifically }
secara khusus alamat try-catch
, yang membolehkan respons yang disesuaikan dengan permintaan pembatalan. Menunggu semula tugas selepas OperationCanceledException
memastikan bahawa sebarang pengecualian atau isyarat pembatalan dari tugas asal disebarkan dengan betul. Task.WhenAny
Atas ialah kandungan terperinci Bagaimanakah saya tidak boleh menunggu tugas dengan masa tamat dan pembatalan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!