使用await遇报错:'await仅能在async方法内使用',但操作已标记async
解决“‘await’运算符只能在async方法内使用”的错误
这个问题其实很直观——你写的TestMethod1方法没有标记为async,但你在方法内部调用await client.ApiRequestTokenPostWithHttpMessagesAsync(tokenRequest)时用了await关键字,这就违反了C#的规则:任何使用await的方法,必须用async修饰符来声明。
你提到觉得相关操作已经标记为async,应该是指ApiRequestTokenPostWithHttpMessagesAsync这个方法本身是async的,但别忘了:调用async方法并使用await的那个方法(也就是你的TestMethod1)也得是async的才行。
把你的方法改成下面这样就能解决问题了:
public async Task TestMethod1() { SvcRestClient client = new SvcRestClient(new Uri("http://localhost:44395"), new AnonymousCredential()); var tokenRequest = new TokenRequest { Username = "myusername", Password = "p@ssword1" }; tokenRequest.Validate(); // passes var tokenResponse = await client.ApiRequestTokenPostWithHttpMessagesAsync(tokenRequest); }
如果这是一个单元测试方法(比如用xUnit、NUnit这类框架),也可以用async void,不过更推荐用async Task——async void在测试框架里可能会引发异步执行的潜在问题。
另外你提供的截图里,错误提示也精准指向了await关键字,这也进一步确认了问题出在方法本身没有标记async上。
内容的提问来源于stack exchange,提问作者Kirsten
相关产品推荐
相关产品推荐

