Как сделать задачу ожидаемой

Вчера я начал играть с асинхронной библиотекой Microsoft CTP и нигде не мог найти правильную реализацию ожидаемой задачи. Я знаю, что у него должна быть такая реализация?:

public struct SampleAwaiter<T>
{
    private readonly Task<T> task;
    public SampleAwaiter(Task<T> task) { this.task = task; }
    public bool IsCompleted { get { return task.IsCompleted; } }
    public void OnCompleted(Action continuation) { TaskEx.Run(continuation); }
    public T GetResult() { return task.Result; }
}

Но как мне теперь реализовать задачу, которая, скажем, ожидает 5 секунд и возвращает некоторую строку, например «Hello World»?

В одну сторону состоит в том, чтобы использовать Task напрямую, например так:

Task<string> task = TaskEx.Run(
            () =>
                {
                    Thread.Sleep(5000);
                    return "Hello World";
                });

        string str = await task;

Но как мне это сделать с ожидаемой реализацией? Или я просто все неправильно понял?

Спасибо за любую информацию / помощь :)

9
задан Peter O. 4 November 2011 в 13:19
поделиться