gpt4 book ai didi

c# - 使异步代码可取消

转载 作者:行者123 更新时间:2023-11-30 16:19:07 25 4
gpt4 key购买 nike

我有一些耗时的方法:

public class TimeConsumingClass
{
public void TimeConsumingMethod()
{
//let's imagine my method works this way
for (var i = 0; i < 10000; i++)
Thread.Sleep();
}
}

它之前在主线程中执行。然后我需要在辅助线程中调用它以不阻塞 UI:

Task.Factory.StartNew(() => { new TimeConsumingClass().TimeConsumingMethod(); });

现在我需要让这个方法可以随时停止。所以我想让我的方法以某种方式处理 CancellationToken,同时我想保留同步调用此方法的可能性(没有 CancellationToken)。我想到的最好的想法是向我的方法添加可选的 CancellationToken 参数,默认情况下该参数为 null(对于同步调用):

public class TimeConsumingClass
{
public void TimeConsumingMethod(CancellationToken cancellationToken = null)
{
//let's imagine my method works this way
for (var i = 0; i < 10000; i++)
{
if (cancellationToken.IsCancellationRequested)
return;
Thread.Sleep();
}
}
}

但是最近在 .NET 多线程方面有很多创新,我觉得这是完成我要做的事情的更好方法。有吗?

最佳答案

如果您正在寻找一种更“现代”的方式来做到这一点,最好的办法是研究 c# 中新的 asyncawait 关键字。它们是迄今为止实现异步性最直接的方法。

您可以在此处找到对 asyncawait 的很好介绍:

使用 Async 和 Await 进行异步编程(C# 和 Visual Basic)
http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx

要了解如何报告进度和取消异步方法,请阅读此处:

4.5 中的异步:在异步 API 中启用进度和取消
http://blogs.msdn.com/b/dotnet/archive/2012/06/06/async-in-4-5-enabling-progress-and-cancellation-in-async-apis.aspx

要取消与您在问题中使用的代码风格相同的任务,请查看此处:

任务取消
http://msdn.microsoft.com/en-us/library/dd997396.aspx

关于c# - 使异步代码可取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438937/

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