C# Net 4.0任务的替代方案。WhenAny()有2个任务?
我正在基于客户机/服务器的应用程序上编写;客户端可以请求服务器运行某些计算。 服务器将在后台线程上启动计算,并在计算过程中每1秒发送一条心跳消息 在最近的网络版本中,这相当容易:C# Net 4.0任务的替代方案。WhenAny()有2个任务?,c#,asynchronous,task,C#,Asynchronous,Task,我正在基于客户机/服务器的应用程序上编写;客户端可以请求服务器运行某些计算。 服务器将在后台线程上启动计算,并在计算过程中每1秒发送一条心跳消息 在最近的网络版本中,这相当容易: var calculationTask = Task.Run(() => DoTheCalculation()); while(true) { Task heartbeatTask = Task.Delay(
var calculationTask = Task.Run(() => DoTheCalculation());
while(true)
{
Task heartbeatTask = Task.Delay(1000); // We send a heartbeat every second
Task combinedTask = Task.WhenAny(calculationTask, heartbeatTask);
combinedTask.Wait();
if(calculationTask.IsFaulted || calculationTask.IsCompleted)
{
SendResultToClient();
break;
}
SendHeartbeatToClient();
}
但我现在希望在NET4.0中实现相同的模式。Task.Run()和Task.Delay()相对容易伪造;但是Task.WhenAny()的实现似乎并不容易
有没有聪明的人以其他方式假装这种行为?我已经想到了一些其他形式的信号(ManualResetEventSlim),但到目前为止,我真的没有想到任何方法可以让它防弹
我正在寻找一个不需要任何其他库的解决方案(例如,不需要TPL或类似的库)
谢谢 在.NET 4.0中,最好的替代方案是 您通常使用以下方法将其称为:
Task.Factory.ContinueWhenAny(yourArrayOfTasks, yourActionWhenAnyHere);
在.NET4.0中,最好的替代方法是 您通常使用以下方法将其称为:
Task.Factory.ContinueWhenAny(yourArrayOfTasks, yourActionWhenAnyHere);
为什么不传递一个CancellationToken并将其设置为1000ms过期?为什么不传递一个CancellationToken并将其设置为1000ms过期?