Introducing the Task-Based Asynchronous Pattern: Listing 3.

The TaskCompletionSource<T> Object

static public Task<Process> RunProcessAsync(string fileName,
  CancellationToken cancellationToken)
{
  TaskCompletionSource<Process> taskCompletionSource =
    new TaskCompletionSource<Process>(); 
  Process process = new Process()
  {
    StartInfo = new ProcessStartInfo(fileName)
    {
      UseShellExecute = false
    },
    EnableRaisingEvents = true,
  };
 
  process.Exited += (sender, localEventArgs) =>
  {
    taskCompletionSource.SetResult(process);
  };
 
  if (cancellationToken.IsCancellationRequested)
  {
    cancellationToken.ThrowIfCancellationRequested();
  }
 
  process.Start();
 
  if (cancellationToken.Register( ()=>
    {
      process.CloseMainWindow();
      cancellationToken.ThrowIfCancellationRequested();
    }
 
  return taskCompletionSource.Task;
}

About the Author

Mark Michaelis (http://IntelliTect.com/Mark) is the founder of IntelliTect and serves as the Chief Technical Architect and Trainer. Since 1996, he has been a Microsoft MVP for C#, Visual Studio Team System, and the Windows SDK and in 2007 he was recognized as a Microsoft Regional Director. He also serves on several Microsoft software design review teams, including C#, the Connected Systems Division, and VSTS. Mark speaks at developer conferences and has written numerous articles and books - Essential C# 5.0 is his most recent. Mark holds a Bachelor of Arts in Philosophy from the University of Illinois and a Masters in Computer Science from the Illinois Institute of Technology. When not bonding with his computer, Mark is busy with his family or training for another triathlon (having completed the Ironman in 2008). Mark lives in Spokane, Washington, with his wife Elisabeth and three children, Benjamin, Hanna and Abigail.

comments powered by Disqus

Featured

  • Oracle Leans on VS Code for New AI Dev Tooling

    Separate Oracle guides for Fusion AI Agent Studio and APEX development illustrate how VS Code has evolved from a popular editor into a foundation for an expanding range of developer experiences.

  • Speak Your Vibe: VS Code Insiders Talks Up Voice-Driven Development

    Microsoft is devoting an unusual share of the early VS Code 1.131 Insiders cycle to built-in dictation, Voice Mode and other speech-driven development features.

  • Visual Studio Insiders Further Refines Copilot Usage Tracking

    With devs reeling from usage-based billing sticker shock, Visual Studio 18.9 makes monthly Copilot plan usage easier to reach from the coding workflow while adding more cost information to a redesigned model picker.

  • VS Code 1.130 Expands Agent Host and Review Tools

    Microsoft's latest weekly VS Code release advances shared agent sessions, multi-file change review, chat visibility and terminal navigation

Subscribe on YouTube