9

我的 System.Threading.Task 上不能有 .Delay 定义。

 public async Task<string> WaitAsynchronouslyAsync()
 {         
     await Task.Delay(10000);
     return "Finished";
 }
4

2 回答 2

35

您正在使用 .NET 4。当时,没有Task.Delay. 但是,Microsoft 有一个名为Microsoft.Bcl.Async的库,它提供了一个替代方案:TaskEx.Delay.

它将像这样使用:

public async Task<string> WaitAsynchronouslyAsync()
{         
    await TaskEx.Delay(10000);
    return "Finished";
}

您的其他选择是更新到 .NET 4.5,或者自己实现它:

public static Task Delay(double milliseconds)
{
    var tcs = new TaskCompletionSource<bool>();
    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Elapsed += (o, e) => tcs.TrySetResult(true);
    timer.Interval = milliseconds;
    timer.AutoReset = false;
    timer.Start();
    return tcs.Task;
}

(取自Servy的回答here)。

于 2013-07-18T07:24:23.110 回答
3

如果我正确解释了这个问题,听起来您只是在使用 .NET 4.0;Task.Delay在 .NET 4.5 中添加。您可以使用诸如系统计时器回调和 a 之类的东西添加自己的实现TaskCompletionSource,或者:只需更新到 .NET 4.5

于 2013-07-18T07:23:11.503 回答