Неблокирующий сон в C # 5.0 (как setTimeout в JavaScript) - PullRequest
11 голосов
/ 03 октября 2011

Что является аналогом 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 ... ?
}

1 Ответ

5 голосов
/ 03 октября 2011

AsyncCTP имеет TaskEx.Delay.Это обернет таймеры в вашу задачу.Обратите внимание, что это не готовый к использованию код.TaskEx будет объединено с Task, когда прибудет C # 5.

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);
}
...