由于我无法控制的原因,我需要同步调用异步方法。我正在开发一个库,它使用另一个异步工作的库,我需要从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);
}
我一直在阅读如何同步运行异步 Task<T> 方法?,特别是这个答案,并且在@Stephen Cleary 的评论中指出该解决方案不好,因为某些 ASP.NET 部分需要一个AspNetSynchronizationContext
. 我正在开发一个库,所以我不知道从哪里调用我的类。
同步调用异步方法的最安全方法是什么?