gpt4 book ai didi

c# - 如何在 .net 3.5 中获得 Task 的等价物?

转载 作者:可可西里 更新时间:2023-11-01 08:55:42 25 4
gpt4 key购买 nike

我有一些代码正在使用 Task<T>它会在短时间内延迟从串行读取操作返回结果,如下所示:

void ReturnResponseAfterAShortDelay()
{
if (delayedResponseCancellationTokenSource != null)
delayedResponseCancellationTokenSource.Cancel(); // Cancel any pending operations and start a new one.

delayedResponseCancellationTokenSource = new CancellationTokenSource();

log.InfoFormat("Deferring response for {0} ms", Settings.Default.TimeoutMs);

Task.Delay(Properties.Settings.Default.TimeoutMs, delayedResponseCancellationTokenSource.Token)
.ContinueWith((continuation) => ReturnWhateverHasArrived(), TaskContinuationOptions.NotOnCanceled)
.Start();
}

此代码背后的想法是在指定时间间隔内没有新字符到达时返回结果。

但是,由于我无法控制的因素,我必须使用 .NET 3.5,这使我无法使用 Task<T> ,所以我必须以某种方式重构这段代码。

如何在不使用 Task<T> 的情况下获得相同的结果? ?

澄清

虽然我展示的具体代码恰好是定时延迟,但我的用法并不局限于延迟事情。在其他情况下,我可能想立即启动一些“长时间运行”的轮询任务。典型情况是 I/O 绑定(bind)操作,例如定期查询连接到串行端口的设备,然后在满足某些条件时引发事件。

最佳答案

您可以使用以下任一通过 NuGet 提供的包:

  • 您可以使用 TaskParallelLibrary NuGet 上的包。此包具有强大的名称,是用于 .NET 4 的 .NET 任务并行库的 .NET 3.5 后向端口,包含在 Reactive Extensions 中。

  • 您可以使用 System.Threading.Tasks.Unofficial NuGet 上的包。此替代实现使用 Mono 代码库而不是 Microsoft 实现。请注意,此包中包含的程序集没有强名称,因此如果您的库使用强名称,则这不是一个选项。

关于c# - 如何在 .net 3.5 中获得 Task<T> 的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22516303/

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