У меня есть код 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