Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ContinueWith a Task on the Main thread

Tags:

c#

c#-4.0

task

Forgive me if this is a simple question; I couldn't phrase it in a generic enough way to search for the answer.

Consider this code:

var task = Task.Factory.StartNew(() => Whatever());  
task.ContinueWith(Callback, TaskScheduler.FromCurrentSynchronizationContext())

How exactly is it determined when the callback method will execute?

Will it wait until the main thread is currently finished doing whatever it is doing, or will it get called immediately after the asynchronous call is complete? And will this callback execute entirely before the main thread returns to whatever it was doing before?

like image 546
user981225 Avatar asked Feb 19 '23 22:02

user981225


1 Answers

Will it wait until the main thread is currently finished doing whatever it is doing, or will it get called immediately after the asynchronous call is complete?

When the asynchronous call completes, the continuation will be scheduled. The effect of that scheduling depends on the scheduler (of course) but for a "normal" WPF or Windows Forms message loop, I'd expect it to be scheduled in a similar way to a call to Control.BeginInvoke or Dispatcher.BeginInvoke - in other words, when the "main" thread has finished the rest of the tasks which had been scheduled before this one.

I wouldn't expect the main thread to magically stop what it's doing and execute the continuation. It could make the continuation a high-priority task in its queue, however.

like image 171
Jon Skeet Avatar answered Feb 27 '23 23:02

Jon Skeet