異步等待任務(wù)<T>完成超時(shí)我想等一個(gè)任務(wù)<T>為了完成一些特殊的規(guī)則:如果在X毫秒之后還沒(méi)有完成,我想向用戶顯示一條消息。如果在Y毫秒之后還沒(méi)有完成,我想自動(dòng)請(qǐng)求取消.我可以用任務(wù),繼續(xù)異步等待任務(wù)完成(即,在任務(wù)完成時(shí)安排要執(zhí)行的操作),但這不允許指定超時(shí)。我可以用任務(wù)等等同步等待任務(wù)以超時(shí)方式完成,但這會(huì)阻塞我的線程。我如何異步地等待超時(shí)任務(wù)的完成?
3 回答

搖曳的薔薇
TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
public static async Task<TResult> TimeoutAfter<TResult>(this Task<TResult> task, TimeSpan timeout) { using (var timeoutCancellationTokenSource = new CancellationTokenSource()) { var completedTask = await Task.WhenAny(task, Task.Delay(timeout, timeoutCancellationTokenSource.Token)); if (completedTask == task) { timeoutCancellationTokenSource.Cancel(); return await task; // Very important in order to propagate exceptions } else { throw new TimeoutException("The operation has timed out."); } }}

德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
Task.WaitAny
WaitAny
- 3 回答
- 0 關(guān)注
- 797 瀏覽
添加回答
舉報(bào)
0/150
提交
取消