我不能等待可等待的对象?

10

在以下问题上,Visual Studio会抱怨:

public RelayCommand SendRegistrationCommand { get; private set; }
public async void SendRegistration()
{
    HttpClient client = new HttpClient();
    var response = await client.GetStringAsync("url");

    // ... todo
}

Cannot await 'System.Threading.Tasks.Task<string>'

我以为我之前做过这件事,GetStringAsync不能被等待吗?


2
你能展示完整的方法吗?也许它没有被标记为“async”修饰符? - tpeczek
@tpeczek 我已经发布了这个函数。 - Jason94
4
你可能的目标是 .NET 4.0,能否切换到4.5? - dcastro
1
GetStringAsync是可等待的。您正在构建什么样的应用程序?您可能会缺少参考,例如https://dev59.com/bWIk5IYBdhLWcg3wRMJQ。 - Oskar Lindberg
@Oskar Lindberg 我正在使用可移植类库构建一个WP8应用程序。 - Jason94
如果您的目标是4.5或更高版本,则Uninstall-Package Microsoft.CompilerServices.AsyncTargetingPack可能会像我一样解决它。 - wal
2个回答

20

我的可移植类库是针对 .NET 4.5 的 :-/ - Jason94
2
AsyncTargetingPack 相当古老;使用 Microsoft.Bcl.Async 是正确的包。 - Stephen Cleary
@StephenCleary 感谢您的提示,我已经更新了我的答案。 - dcastro
1
@Jason94:如果你想在可移植类库中使用async,则需要安装Microsoft.Bcl.Async - Stephen Cleary

-3

确保 client.GetStringAsync("url") 是一个异步任务

private async Task GetStringAsync(string str)
{
}

GetStringAsync不需要是异步的。它只需要返回Task即可。 - jt000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接