Будет ли этот универсальный метод C# правильно обрабатывать асинхронность?C#

Место общения программистов C#
Ответить
Anonymous
 Будет ли этот универсальный метод C# правильно обрабатывать асинхронность?

Сообщение Anonymous »

У меня есть код C# (в библиотеке .NET Standard 2.0), который выглядит следующим образом:

Код: Выделить всё

private object MySynchronousOp(object param, object cmnParam)
{
//Do stuff...
return theObject;
}

private ResponseT Do(Func op, RequestT request)
{
//Do some checks, get/setup cmnParam.
return op.Invoke(request, cmnPatam);
}

public object RunMySynchronousOp(object param)
{
return Do(MySynchronousOp, param);
}
Этот шаблон повторяется для многих пар MySynchronousOp и RunMySynchronousOp, используя Do для выполнения общего набора проверок и предоставления допустимого общего параметра.
Теперь я добавляю асинхронную пару методов, подобных следующим, без изменения уже определенного метода Do():

Код: Выделить всё

private async Task MyAsynchronousOp(object param, object cmnParam)
{
//Do stuff, with awaits here...
return theObject;
}

public async Task RunMyAsynchronousOp(object param)
{
return Do(MyAsynchronousOp, param);
}
Эта компиляция меня удивила, и, сидя здесь, я нахожу это подозрительным. У меня пока нет возможности протестировать это изменение, но мне было любопытно, стоит ли ожидать, что оно сработает без каких-либо неприятных сюрпризов или неожиданного поведения. Я привык думать об асинхронных методах как о цветных функциях, которые необходимо либо вызывать из других асинхронных функций, либо вызывать Wait() для задачи, возвращаемой из нее, чтобы снова сделать ее синхронной, но в этом случае асинхронная природа метода My... проходит через метод Do и снова проявляется в методе Run..., во что я не уверен, верю ли я.
Я что-то упустил?

Подробнее здесь: https://stackoverflow.com/questions/798 ... c-properly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»