here is sample code for starting multiple task
Task.Factory.StartNew(() =>
{
//foreach (KeyValuePair entry in dicLis
You can use the WaitAll(). Example :
Func<bool> DummyMethod = () =>{
// When ready, send back complete!
return true;
};
// Create list of tasks
System.Threading.Tasks.Task<bool>[] tasks = new System.Threading.Tasks.Task<bool>[2];
// First task
var firstTask = System.Threading.Tasks.Task.Factory.StartNew(() => DummyMethod(), TaskCreationOptions.LongRunning);
tasks[0] = firstTask;
// Second task
var secondTask = System.Threading.Tasks.Task.Factory.StartNew(() => DummyMethod(), TaskCreationOptions.LongRunning);
tasks[1] = secondTask;
// Launch all
System.Threading.Tasks.Task.WaitAll(tasks);
if i start 10 task using Task.Factory.StartNew() so how do i notify after when 10 task will be finish
You can use Task.WaitAll. This call will block current thread until all tasks are finished.
Side note: you seem to be using Task
, Parallel
and Thread.SpinWait
, which makes your code complex. I would spend a bit of time analysing if that complexity is really necessary.
Another solution:
After the completion of all the operation inside Parallel.For(...)
it return an onject of ParallelLoopResult
, Documentation:
For returns a System.Threading.Tasks.ParallelLoopResult object when all threads have completed. This return value is useful when you are stopping or breaking loop iteration manually, because the ParallelLoopResult stores information such as the last iteration that ran to completion. If one or more exceptions occur on one of the threads, a System.AggregateException will be thrown.
The ParallelLoopResult
class has a IsCompleted
property that is set to false when a Stop()
of Break()
method has been executed.
Example:
ParallelLoopResult result = Parallel.For(...);
if (result.IsCompleted)
{
//Start another task
}
Note that it advised to use it only when breaking or stoping the loop manually (otherwise just use WaitAll
, WhenAll
etc).
if i start 10 task using Task.Factory.StartNew() so how do i notify after when 10 task will be finish
Three options: