Пока вы возвращаете Задачу, которая каким-либо образом завершается (в потоке или асинхронно), вы поддерживаете асинхронную модель.
Выполнение Задачи асинхронно - другая история.Если у вас есть доступ к ключевому слову async и API, вы можете просто основывать свой метод на асинхронных вызовах других, уже предоставленных асинхронных методов.Но в этом случае вам придется вручную создавать свои асинхронные задачи.
Возможно, есть лучшие способы сделать это, но самый элегантный способ, который я вижу (и использовал), это использовать System.Threading.Tasks.TaskCompletionSource
дляДля создания задачи используйте модель асинхронных методов Begin
/ End
, чтобы выполнить все, что вам нужно.Затем, когда у вас есть результат, опубликуйте его в ранее созданном экземпляре Task
, используя ваш источник завершения.
Он, безусловно, будет асинхронным, но не таким причудливым, как в следующем выпуске.
Отказ от ответственности: Я далеко не эксперт по этому вопросу.Только что провел несколько экспериментов.