Skip to content

Async & TPL

Sandesh Kota edited this page Mar 19, 2019 · 23 revisions
  • Async : Responsiveness (backend)
  • Parallel : Performance (divide workload)
  • Risk:
    • Race Conditions
    • Dependency -> ensure that you wait for the dependent task to have the required data

Task

  • Creating a Task in parallel (depends on # of cores also)
    • Single core: threads are shared - Still best for responsiveness (ex: main thread is for UI)
    • Multi Core: threads run in parallel
      • Only the main thread/ UI thread can update UI
using System.Threading.Tasks;

Task t = new Task( () => { 
  // code
});
t.Start();

// another way to create and start task
task tnew = task.Factory.StartNew( _code_ );


// To Wait for the task completion
tnew.Wait();
  • Continue With
Task t = new Task( () => { 
  // code
});

Task t2 = t.ContinueWith( (antecedent) => { } ); // starts after T is finished
t.Start();
  • Safe Way (typesafe, reduce the race condition issues)
Task<int> t = Task.Factory.StartNew( () => 
{
  // ...
  return 1;
});
int r = t.Result;      // implicitlly calls t.Wait()

Clone this wiki locally