在如下代码中:

public async Task<string> GetData()

{

  return await DoWork();

}

 

在UI线程中调用

var data = GetData().Result;

此时线程会卡死;

两种解决办法:

1,所有调用方法链中使用async、await方式调用。

var data = await GetData().

2, 去掉调用链中的async,await,直接返回Task类型。

public Task<string> GetData()

{

  return DoWork();

}

 

原因 Task.Result会直接阻塞当前调用线程,而aysnc、await机制是使用状态机切换上下文,

当调用.Result时,当前线程阻塞,async、await状态机无法切换回线程上下文,导致死锁。

相关文章:

  • 2021-06-29
  • 2022-02-02
  • 2021-07-10
  • 2022-03-01
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2021-06-07
  • 2021-08-09
  • 2021-10-31
相关资源
相似解决方案