Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to tell which Tasks are currently running in Task Parallel Library?

I can't see a way to see which tasks are running. There is the Task.Current property, but what if there are multiple tasks running? Is there a way to get this kind of information?

Alternately, is there a built in way to get notified when a task starts or completes?

like image 404
Mike Two Avatar asked Mar 01 '23 05:03

Mike Two


1 Answers

Hey Mike, there is no public way of accessing the list of pending tasks in TPL. The mechanism that makes it available for the debugger relies on the fact that all threads will be frozen at enumeration time, therefore it can't be used at runtime.

Yes, there's a built in way to get notified whan a task completes. Check out the Task.ContinueWith APIs. Basically this API creates a new task that will fired up when the target task completes.

I'm assuming you want to do some quick accounting / progress reporting based on this, if that's the case, I'd recommend that you call task.ContinueWith() with the TaskContinuationOptions.ExecuteSynchronously flag. When you specify that the continuation action will be run right there on the same thread when the target task finishes (if you don't specify this the continuation task is queued up like any other regular task).

Hope this helps.

Huseyin

like image 131
HYildiz Avatar answered Apr 26 '23 13:04

HYildiz