Tag: 异步等待

HttpClient.GetAsync(…)在使用await / async时永远不会返回

编辑: 这个问题看起来可能是相同的问题,但没有回应… 编辑:在测试案例5中,任务似乎卡在WaitingForActivation状态。 我遇到一些奇怪的行为在.NET 4.5中使用System.Net.Http.HttpClient – “等待”(例如) httpClient.GetAsync(…)调用的结果将永远不会返回。 只有在使用新的异步/等待语言功能和任务API时,才会出现这种情况 – 只使用延续时,代码似乎总能工作。 下面是一些重现问题的代码 – 在Visual Studio 11中将其放入一个新的“MVC 4 WebApi项目”中,以显示以下GET端点: /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <— never completes /api/test6 这里的每个端点都返回与从未完成的/api/test5相同的数据(来自stackoverflow.com的响应头)。 我在HttpClient类中遇到了一个错误,或者我以某种方式滥用API? 代码重现: public class BaseApiController : ApiController { /// <summary> /// Retrieves data using continuations /// </summary> protected Task<string> Continuations_GetSomeDataAsync() { var httpClient = new HttpClient(); var […]

为所有服务器端代码调用ConfigureAwait的最佳实践

当你有服务器端代码(例如一些ApiController )和你的函数是异步的 – 所以它们返回Task<SomeObject> – 当你等待函数调用ConfigureAwait(false) ,是否认为是最佳做法? 我已经读过,它更高性能,因为它不必将线程上下文切换回原始线程上下文。 但是,对于ASP.NET Web Api,如果您的请求在一个线程中进入,并且您正在等待某个函数,并且在您返回ApiController函数的最终结果时调用ConfigureAwait(false) ,这可能会将您置于不同的线程中。 我已经打出了一个我在下面讨论的例子: public class CustomerController : ApiController { public async Task<Customer> Get(int id) { // you are on a particular thread here var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false); // now you are on a different thread! will that cause problems? return customer; } }

为什么EF 6教程使用异步调用?

通过如何使用EF 6与MVC 5的最新EF教程似乎倾向于使用asych调用数据库,如: Department department = await db.Departments.FindAsync(id); 这是新标准还是最佳做法? 我不确定这种ASP.NET MVC开发的好处是什么。 有人能评论这个模式吗,这是MS推广的新标准吗?