Мне нужно синхронно вызвать асинхронный метод по независящим от меня причинам. Я разрабатываю библиотеку, которая использует другую библиотеку, работающую асинхронно, и мне нужно использовать ее из реализации класса Stream
. Такой класс содержит синхронные и асинхронные методы, и меня беспокоят синхронные:
public override sealed int Read(byte[] buffer, int offset, int count)
{
// potential deadlock on single threaded synchronization context
return ReadAsync(buffer, offset, count).Result;
}
public override async Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
return await _lib.ReadAsync(buffer,offset,count);
}
Я читал Как мне запустить асинхронную задачу‹T› метод синхронно?, в частности этот ответ, а в комментариях @Stephen Cleary заявляет, что решение не хорошо, так как некоторые части ASP.NET ожидают AspNetSynchronizationContext
. Я разрабатываю библиотеку, поэтому не знаю, откуда будут вызываться мои классы.
Каким будет самый безопасный способ синхронного вызова асинхронного метода?