【发布时间】:2015-05-20 22:36:49
【问题描述】:
考虑这个相当简单的方法:
private bool ValidateKey(HttpRequestMessage message)
{
}
上述方法调用如下
if (!ValidateKey(request))
{
//do something
}
现在我想在 ValidateKey 中调用一个返回 Task 的方法。我们假设它是 HttpRequestMessage 中的 ReadAsStringAsync 方法:
message.Content.ReadAsStringAsync();
既然这个方法可以异步运行,我最好这样称呼它:
string output = await message.Content.ReadAsStringAsync();
但这将要求我更改我的方法签名以包括异步和返回类型为 Task,然后调用者也...无限。
可以同步调用 ReadAsStringAsync,即我愿意让 ValidateKey 等到 ReadAsStringAsync 完成。这将省去我为了迎合这一方法而更改代码的麻烦。
【问题讨论】:
-
如下面的几个答案所述,调用 Result 属性将导致线程阻塞,直到获得异步方法的返回值。但是,我找到了 Stephen Cleary 的一个相当出色的答案,描述了为什么这可能不是一个好主意。 stackoverflow.com/a/12484535/117531
标签: c# async-await