我试图在我的控制器中实现await Task.Run,然后返回响应。
只是好奇在我们尝试返回之前是否总是得到回应。
var response = await Task.Run(() => _myService.GetResponse(refno));
return Ok(response);
它是否可以尝试返回尚未设置的响应?
由于
答案 0 :(得分:3)
Task.Run将立即返回未完成的任务。等待你等待任务完成而不阻塞你的线程。只有当_myService.GetResponse(refno))
返回或抛出异常时,任务才会完成。
简而言之:
当您点击第二行时,您的响应将始终设置。但_myService.GetResponse(refno)
可能会引发异常。在这种情况下,异常将被重新抛出,您将无法到达第二行。
答案 1 :(得分:3)
var response = await Task.Run(() => _myService.GetResponse(refno));
return Ok(response);
它是否会尝试返回尚未设置的响应?
没有;从代码中可以看出,response
在返回之前已分配给它。实际上,C#不会让你使用未分配的变量;这是其类型安全的一部分。
但是,你永远不应该这样做! There's no benefit to doing await Task.Run
on ASP.NET。
如果您可以将GetResponse
更改为异步,请执行以下操作:
var response = await _myService.GetResponseAsync(refno);
return Ok(response);
否则,只需同步调用它:
var response = _myService.GetResponse(refno);
return Ok(response);