Asynchronously wait for Task to complete with timeout
I want to wait for a Task<T> to complete with some special rules:If it hasn't completed after X milliseconds, I want to display a message to the user.And if it hasn't completed after Y...
View ArticleAnswer by as-cii for Asynchronously wait for Task to complete with timeout
What about something like this? const int x = 3000; const int y = 1000; static void Main(string[] args) { // Your scheduler TaskScheduler scheduler = TaskScheduler.Default; Task nonblockingTask = new...
View ArticleAnswer by Tomas Petricek for Asynchronously wait for Task to complete with...
You can use Task.WaitAny to wait the first of multiple tasks.You could create two additional tasks (that complete after the specified timeouts) and then use WaitAny to wait for whichever completes...
View ArticleAnswer by Quartermeister for Asynchronously wait for Task to complete with...
Use a Timer to handle the message and automatic cancellation. When the Task completes, call Dispose on the timers so that they will never fire. Here is an example; change taskDelay to 500, 1500, or...
View ArticleAnswer by Andrew Arnott for Asynchronously wait for Task to complete with...
How about this:int timeout = 1000;var task = SomeOperationAsync();if (await Task.WhenAny(task, Task.Delay(timeout)) == task) { // task completed within timeout} else { // timeout logic}And here's a...
View ArticleAnswer by Redwood for Asynchronously wait for Task to complete with timeout
Here's a extension method version that incorporates cancellation of the timeout when the original task completes as suggested by Andrew Arnott in a comment to his answer. public static async...
View ArticleAnswer by Contango for Asynchronously wait for Task to complete with timeout
Here is a fully worked example based on the top voted answer, which is:int timeout = 1000;var task = SomeOperationAsync();if (await Task.WhenAny(task, Task.Delay(timeout)) == task) { // task completed...
View ArticleAnswer by kns98 for Asynchronously wait for Task to complete with timeout
If you use a BlockingCollection to schedule the task, the producer can run the potentially long running task and the consumer can use the TryTake method which has timeout and cancellation token built in.
View ArticleAnswer by Kevan for Asynchronously wait for Task to complete with timeout
Another way of solving this problem is using Reactive Extensions:public static Task TimeoutAfter(this Task task, TimeSpan timeout, IScheduler scheduler){ return task.ToObservable().Timeout(timeout,...
View ArticleAnswer by 1iveowl for Asynchronously wait for Task to complete with timeout
A generic version of @Kevan's answer above, using Reactive Extensions.public static Task<T> TimeoutAfter<T>(this Task<T> task, TimeSpan timeout, IScheduler scheduler){ return...
View ArticleAnswer by Cocowalla for Asynchronously wait for Task to complete with timeout
Using Stephen Cleary's excellent AsyncEx library, you can do:TimeSpan timeout = TimeSpan.FromSeconds(10);using (var cts = new CancellationTokenSource(timeout)){ await...
View ArticleAnswer by antak for Asynchronously wait for Task to complete with timeout
I felt the Task.Delay() task and CancellationTokenSource in the other answers a bit much for my use case in a tight-ish networking loop.And although Joe Hoag's Crafting a Task.TimeoutAfter Method on...
View ArticleAnswer by sjb-sjb for Asynchronously wait for Task to complete with timeout
A few variants of Andrew Arnott's answer: If you want to wait for an existing task and find out whether it completed or timed out, but don't want to cancel it if the timeout occurs:public static async...
View ArticleAnswer by Josef Bláha for Asynchronously wait for Task to complete with timeout
This is a slightly enhanced version of previous answers.In addition to Lawrence's answer, it cancels the original task when timeout occurs.In addtion to sjb's answer variants 2 and 3, you can provide...
View ArticleAnswer by tm1 for Asynchronously wait for Task to complete with timeout
I'm recombinging the ideas of some other answers here and this answer on another thread into a Try-style extension method. This has a benefit if you want an extension method, yet avoiding an exception...
View ArticleAnswer by thomasrea0113 for Asynchronously wait for Task to complete with...
So this is ancient, but there's a much better modern solution. Not sure what version of c#/.NET is required, but this is how I do it:... Other method code not relevant to the question.// a token source...
View ArticleAnswer by Edward Brey for Asynchronously wait for Task to complete with timeout
Create a extension to wait for the task or a delay to complete, whichever comes first. Throw an exception if the delay wins.public static async Task<TResult> WithTimeout<TResult>(this...
View ArticleAnswer by Armand for Asynchronously wait for Task to complete with timeout
With .Net 6 (preview 7 as the date of this answer), it is possible to use the new WaitAsync(TimeSpan, CancellationToken) which answers to this particular need.If you can use .Net6, this version is...
View ArticleAnswer by Vijay Nirmal for Asynchronously wait for Task to complete with timeout
From .Net 6 (Preview 7) or later, there is a new build-in method Task.WaitAsync to achieve this.// Using TimeSpanawait myTask.WaitAsync(TimeSpan.FromSeconds(10));// Using CancellationTokenawait...
View ArticleAnswer by flodis for Asynchronously wait for Task to complete with timeout
For the fun of it I made a 'OnTimeout' extension to Task. On timeout Task executes the desired inline lambda Action() and returns true, otherwise false.public static async Task<bool>...
View Article