2011-10-02 21 views
11

¿Cuál es el valor analógico de setTimeout(callback, milliseconds) de JavaScript para el C# en un nuevo estilo "asincrónico"?Dormir sin bloqueo en C# 5.0 (como setTimeout en JavaScript)

Por ejemplo, ¿cómo volver a escribir el siguiente JavaScript de continuación de paso de estilo en C-as habilitado con asincronismo moderno?

JavaScript:

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

C# -5.0:

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

Respuesta

5

AsyncCTP tiene TaskEx.Delay. Esto envuelve temporizadores en su tarea. Tenga en cuenta que este no es un código de producción listo. TaskEx se fusionará en Task cuando llegue C# 5.

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

O si desea volver it:

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