c# - C#5.0 中的非阻塞 sleep (类似于 JavaScript 中的 setTimeout)

标签 c# c#-5.0

在新的“异步”样式中,JavaScript 的 setTimeout(callback, milliseconds) 与 C# 的模拟是什么?

例如,如何将以下延续传递风格的 JavaScript 重写为支持异步的现代 C#?

JavaScript:

function ReturnItAsync(message, callback) {
    setTimeout(function(){ callback(message); }, 1000);
}

C#-5.0:

public static async Task<string> ReturnItAsync(string it) {
    //return await ... ?
}

最佳答案

AsyncCTP 有 TaskEx.Delay。这会将计时器包装在您的任务中。请注意,这不是生产就绪代码。 TaskEx 将在 C# 5 到来时合并到 Task 中。

private static async Task ReturnItAsync(string it, Action<string> callback)
{
    await TaskEx.Delay(1000);
    callback(it);
}

或者如果你想返回:

private static async Task<string> ReturnItAsync(string it, Func<string, string> callback)
{
    await TaskEx.Delay(1000);
    return callback(it);
}

关于c# - C#5.0 中的非阻塞 sleep (类似于 JavaScript 中的 setTimeout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629521/

相关文章:

c# - 在 C# 中查找接口(interface)索引

c# - 使用 JWT token 的 ASP.NET Core 网站到 WebApi 身份验证

c# - 如何从 C# 中的完整路径中获取一部分?

c# - 序列化的目的

c# - 关于任务编程的问题

c# - 使用 C# 5 Caller Information 的解决方案示例

c# - 在 catch 子句中禁止等待。寻找解决办法

c# - 一路异步?

c# - 如何处理 xUnit .net 的 Assert.Throws<T> 中任务抛出的异常?

c# - 编辑 Nuget 包 C# Helixtoolkit.WPF