Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The same way we in CCR sometimes wanted to add a timeout to an existing "task" you probably want to do the same in TAP. So here are two extension methods you could use to add a timeout to any task of your choice:
1: public async static Task WithTimeout(this Task task, TimeSpan timeout)
2: {
3: var cancelationSource = new CancellationTokenSource();
4: var delay = Task.Delay(timeout, cancelationSource.Token);
5: await Task.WhenAny(task, delay);
6: if (task.IsCompleted)
7: {
8: cancelationSource.Cancel();
9: }
10: else
11: {
12: throw new TimeoutException();
13: }
14: }
15:
16: public async static Task<T> WithTimeout<T>(this Task<T> task, TimeSpan timeout)
17: {
18: await ((Task)task).WithTimeout(timeout);
19: return await task;
20: }
Comments
Anonymous
September 08, 2012
Don't timeouts normally stop the asynchronous operation, so these extension methods are only 'ad-hoc' in that they wait for a set period of time?Anonymous
September 09, 2012
The comment has been removed