Как я могу обернуть метод с параметром обратного вызова в задачу? - PullRequest
3 голосов
/ 31 января 2012

У меня есть приложение Silverlight 5 с кучей методов, имеющих сигнатуру, подобную этой:

public void AskConfirmation(Action<bool> callback);

Обычно эти методы вызывают запрос InteractionRequest для взаимодействия с пользователем, ожидающим ввода.

Я хотел бы использовать библиотеку параллельных задач и ключевые слова async / await, поэтому я хочу определить второй метод со следующей сигнатурой:

public Task<bool> AskConfirmation();

И этот второй метод будет опираться напервый.К сожалению, я просто не мог понять, как это реализовать.

Оборачивать асинхронные операции в задачи легко, если они следуют асинхронному шаблону на основе событий или шаблону начала / конца, но в моем случае это были явные излишества, поэтому я не хотел их реализовывать.Но сейчас я застрял.Кто-нибудь когда-либо сталкивался с такой же проблемой и нашел решение для нее?

1 Ответ

9 голосов
/ 31 января 2012
public Task<bool> AskConfirmation()
{
    var tcs = new TaskCompletionSource<bool>();
    AskConfirmation(b => tcs.TrySetResult(b));
    return tcs.Task;
}
...