gpt4 book ai didi

c# - 在没有 Task.Wait() 的情况下使用 cancellationToken

转载 作者:行者123 更新时间:2023-11-30 17:08:03 24 4
gpt4 key购买 nike

我有一个 winforms 应用程序,它有一个长时间运行的任务和两个按钮。一键启动,一键停止。

当我按下开始按钮时,一个带有取消 token 的新任务开始了。如果我按下停止按钮,取消 token 的取消方法将被调用。

我希望 UI 始终可用,那么我应该在哪里放置 try、catch block 来完成这项工作。在我看到的所有示例中,他们都将其放在 t.Wait(); 周围。

但如果我这样做,UI 就会卡住,这就是我首先使用任务的原因,以便在执行任务时继续使用 UI。那么在不使用 Task.Wait 的情况下将 try catch block 放在哪里。

开始按钮:

 tokenSource2 = new CancellationTokenSource();
ct = tokenSource2.Token;
t = new Task(doStart, ct);
t.Start();

停止按钮:

tokenSource2.Cancel();

最佳答案

您可以更新 doStart 以处理取消事件并优雅地退出任务,这样您就根本不需要使用 Wait,例如

public void doStart(CancellationToken token)
{
while(...)
{
...
if (token.IsCancellationRequested)
break;
}
}

或者,您可以在另一个线程上等待任务结果,例如

Thread.QueueUserWorkItem((state) =>
{
try
{
t.Wait();
}
catch(...)
{
...
}
});

关于c# - 在没有 Task.Wait() 的情况下使用 cancellationToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com