【问题标题】:Stop Task when task run [duplicate]任务运行时停止任务[重复]
【发布时间】:2020-03-12 21:01:05
【问题描述】:

如何在任务运行时完全停止任务?

private async void button1_Click(object sender, EventArgs e)
{
  await Backup(file);
}

public async Task Backup(string File)
{
   await Task.Run(() =>
     {
       1)do something here

       2)do something here

       3)do something here

      });
}
private async void button2_Click(object sender, EventArgs e)
{
  <stop backup>
}

如果说我想在第二件事正在处理期间停止任务,我点击一个按钮2然后任务将停止进程

如何取消或结束来自button2_Click的任务?

【问题讨论】:

标签: c# .net multithreading c#-4.0 async-await


【解决方案1】:
// Define the cancellation token source & token as global objects 
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token;

//when button is clicked, call method to run task & include the cancellation token 

private async void button1_Click(object sender, EventArgs e)
{
    token = source.Token;
    await Backup(file, token);
}

public async Task Backup(string File, CancellationToken token)
{
    Task t1 = Task.Run(()  =>
    {
        //do something here
    }, 
    token);
} 

//cancel button click event handler 
private async void cancelButton_Click(object sender, EventArgs e)
{
    if(source != null) 
    {
        source.Cancel();
    } 
}

//tasks
https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx 

//CancellationToken
https://msdn.microsoft.com/en-us/library/system.threading.cancellationtoken(v=vs.110).aspx

【讨论】:

  • 我在 CancellationToken token = null 中得到一个错误; (无法将 null 转换为“System.Threading.CancellationToken”,因为它是不可为空的值)
  • 我认为你必须在实例化Task时使用source.Token。
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多