Ответ 1
async
не является частью подписи, поэтому вам действительно не нужно беспокоиться о том, является ли метод реализации интерфейса async
или нет, вам нужно только учитывать типы свойства, тип возврата, имя метода и доступность.
Реальная разница в том, что ваши методы async
должны будут возвращать Task
или Task<T>
, тогда как неасинхронные методы, скорее всего, в настоящее время возвращают void
или некоторый тип, T
напрямую.
Если вы хотите, чтобы "будущее доказательство" вашего приложения было одним из вариантов, убедитесь, что все ваши интерфейсы возвращают Task
или Task<T>
, а для ваших реализаций EF4/EF5 вы завершаете результаты в завершенной задаче, даже если они Выполняется синхронно.
Task.FromResult
был добавлен в .NET 4.5, но если у вас его нет, вы можете написать свой собственный достаточно легко:
public static Task<T> FromResult<T>(T result)
{
var tcs = new TaskCompletionSource<T>();
tcs.SetResult(result);
return tcs.Task;
}
Вы также можете написать метод CompletedTask
, который просто возвращает задание, которое уже выполнено: (Он кэширует одну задачу по соображениям эффективности.)
private static Task _completedTask;
public static Task CompletedTask()
{
return _completedTask ?? initCompletedTask();
}
private static Task initCompletedTask()
{
var tcs = new TaskCompletionSource<object>();
tcs.SetResult(null);
_completedTask = tcs.Task;
return _completedTask;
}
Эти два метода упростят процесс, когда все ваши методы возвращают некоторый тип Task
, хотя это сделает ваш код немного более беспорядочным, пока вы не сможете использовать С# 5.0, чтобы иметь возможность await
результат.