Вопрос про асинки
От: SergASh  
Дата: 19.03.17 15:56
Оценка:
Привет всем.

Имеется следующий класс.
public static class Helper
{
  public static Task ExecuteInContextAsync( Func<IContext, Task> action )
  { // Вариант №1
    return ExecuteInDataContextAsync( context =>
                                      {
                                        action( context );
                                        return Task.FromResult( 0 );
                                      } );
  }

  public static async Task ExecuteInContextAsync( Func<IContext, Task> action )
  { // Вариант №2
    await ExecuteInDataContextAsync( async context =>
                                           {
                                             await action( context );
                                             return 0;
                                           } );
  }

  public static async Task<T> ExecuteInContextAsync<T>( Func<IContext, Task<T>> action )
  { // Полная реализация
    using ( IContext context = BuildContext() )
    {
      var result = await action( context );
      return result;
    }
  }

  private static IContext BuildContext()
  {
    return ...;
  }
}

public interface IContext : IDisposable
{
}

Полная реализация метода, которая Task<T> возвращает — длинная простыня в реальном коде.
Чтобы не повторяться, метод, который без возвращаемого значения, вызывает полную версию одним из двух приведенных способов.
Может кто-нибудь объяснить какая разница между этими двумя вариантами?

PS Понимаю, что варианта там не два может быть, а четыре, и что асинхронность делегата никак не связана с асинхронностью самого метода.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.