我因为无法控制的原因,需要同步调用一个异步方法。我正在开发一个库,它使用另一个异步工作的库,并且我需要在
我一直在阅读如何同步运行异步Task<T>方法?,特别是这个答案,在评论中@Stephen Cleary指出解决方案并不好,因为某些ASP.NET部分期望
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
。 我正在开发一个库,因此我不知道我的类将从哪里调用。
什么是最安全的同步调用异步方法的方法?
Task<T>.Wait
将会阻塞,无论继续策略如何。 - GusdorTask.Run
方法是一个好的临时解决方案,直到我安排时间编写同步方法。 - vtortola