vrw*_*wim 0 c# task async-await
我有一段C#代码(它在Xamarin应用程序中,但我不认为这是相关的)初始化我的应用程序.它是这样的:
class AppController {
public override void InitializeApp() {
// Do stuff to initialize services & database
checkNeedsUpdates();
}
void checkNeedsUpdates() {
Task.Run(() => {
string json = API.Call("versions").Result
// It never gets here
});
}
}
class API {
HttpClient client;
public Task<string> Call(string endpoint) {
// Setup headers and access token things before handing over to POST function
return Post(/*params*/);
}
public async Task<string> Post(/*params*/) {
// Setup
return await Request(/*params*/);
}
public async Task<string> Request(/*params*/) {
HttpRequestMessage message = /*setup*/;
HttpResponseMessage result = await client.SendAsync(message);
result.EnsureSuccessStatusCode();
return await result.Content.ReadAsStringAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
现在奇怪的部分是,我认为应用程序的这一部分没有任何改变,我确实添加了一些代码来解决Call方法内部的refreshtokens问题.
为什么我的应用会冻结?我知道Task.Result在异步方法中使用可能会导致死锁,因为它无法安排自己或其他东西,但我没有改变任何东西或来自async或Task
最终,这种.Result行为是不确定的.而不是担心改变了什么:只需修复它......
Task.Run(async () =>
{
string json = await API.Call("versions");
//...
});
Run Code Online (Sandbox Code Playgroud)
现在定义良好,无论sync-context状态如何,都应该可以正常工作.
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |