2011-10-02 33 views
11

对于C#中的新“异步”风格,JavaScript的setTimeout(callback, milliseconds)类似模式是什么?C#5.0中的非阻塞睡眠(如JavaScript中的setTimeout)

例如,如何将下面的继续传递式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 ... ? 
} 

回答

5

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

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

或者,如果你想返回it

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