Вчера я начал играть с асинхронной библиотекой 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;
Но как мне это сделать с ожидаемой реализацией? Или я просто все неправильно понял?
Спасибо за любую информацию / помощь :)