2011-10-02 10 views
11

Yeni bir "async" stilde C# için JavaScript'in setTimeout(callback, milliseconds) analogu nedir?C# 5.0'de bloksuz uyku (JavaScript'te setTimeout gibi)

Örneğin, aşağıdaki devam eden geçiş stili JavaScript'i modern eşzamansız C# olarak nasıl yeniden yazabilirsiniz?

JavaScript:

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

C# -5,0:

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

cevap

5

AsyncCTP TaskEx.Delay sahiptir. Bu, görevinizdeki zamanlayıcıları tamamlar. Not, bu üretim hazır kod değil. C# 5 geldiğinde TaskEx, Task'a birleştirilecektir.

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

Yoksa dönmek istiyorsanız it:

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