Будет ли этот универсальный метод 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..., во что я не уверен, верю ли я.
Я что-то упустил?
Редактировать: Как обратите внимание: в примере кода я использовал объект, но в реальном коде используются другие типы. Я не копировал и не вставлял реальный код по причинам, связанным с работой. В реальном коде имеется несколько методов MySynchronousOp и RunMySynchronousOp, каждый из которых имеет разные типы RequestT и ResponseT. Я просто не хотел повторять или изобретать что-либо из этого здесь, и, насколько мне известно (хотя я могу ошибаться, я полагаю), это не влияет на суть моего вопроса.

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

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

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

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

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

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