async await task.Result 卡死

 

在如下代码中:

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状态机无法切换回线程上下文,导致死锁。

posted @ 2019-10-15 13:22  广林  阅读(2249)  评论(0编辑  收藏  举报