Nói rằng tôi có hai kịch bản:Có nguy hiểm nào khi sử dụng ConfigureAwait (false) trong bộ điều khiển WebApi hoặc MVC không?
1) WebAPI khiển
[System.Web.Http.HttpPost]
[System.Web.Http.AllowAnonymous]
[Route("api/registerMobile")]
public async Task<HttpResponseMessage> RegisterMobile(RegisterModel model)
{
var registerResponse = await AuthUtilities.RegisterUserAsync(model, _userService, User);
if (registerResponse.Success) {
var response = await _userService.GetAuthViewModelAsync(model.Username, User);
return Request.CreateResponse(HttpStatusCode.OK, new ApiResponseDto() { Success = true, Data = response });
}
else {
return Request.CreateResponse(HttpStatusCode.OK, registerResponse);
}
}
2) MVC Controller
[Route("public")]
public async Task<ActionResult> Public()
{
if (User.Identity.IsAuthenticated)
{
var model = await _userService.GetAuthViewModelAsync(User.Identity.Name);
return View("~/Views/Home/Index.cshtml", model);
}
else
{
var model = await _userService.GetAuthViewModelAsync(null);
return View("~/Views/Home/Index.cshtml", model);
}
}
Tôi đã được đọc lên trên khi tôi nên sử dụng ConfigureAwait
và có vẻ như tôi nên sử dụng ConfigureAwait(false)
trên TẤT CẢ các cuộc gọi không đồng bộ của tôi không được liên kết trực tiếp với giao diện người dùng. Tôi không biết điều đó có nghĩa là gì ... tôi có nên sử dụng .ConfigureAwait(false)
trên tất cả các cuộc gọi await
ở trên không?
Tôi đang tìm một số nguyên tắc rõ ràng về thời điểm chính xác tôi nên sử dụng nó.
Câu hỏi này KHÔNG giống như Best practice to call ConfigureAwait for all server-side code - Tôi đang tìm câu trả lời đơn giản về trường hợp sử dụng cho phương pháp này trong ngữ cảnh của WebApi và MVC, không phải là C# chung.
@MickyD đọc điều đó, tôi thấy "// Phương pháp này gây ra bế tắc khi được gọi trong ngữ cảnh GUI hoặc ASP.NET." - WebApi và MVC có tận dụng ngữ cảnh .NET không? Bạn sẽ làm gì trong kịch bản trên và tại sao? – SB2055
@MickyD Tôi đã đọc nhiều lần và vẫn chưa rõ. Tôi phải ngu ngốc. "làm trong ASP.NET là liệu chuỗi đó có đi vào ngữ cảnh yêu cầu khi tiếp tục lại phương thức hay không." - * Tôi có cần phải làm điều này trong các tình huống trên không? * - Tôi không thể là người duy nhất được hưởng lợi từ một câu trả lời đơn giản ở đây ... Xin đừng đánh dấu là đã đóng vì câu hỏi này là nhiều hơn hướng tới API và MVC như trái ngược với C# chung. – SB2055
http://stackoverflow.com/questions/18970400/async-await-unexpected-behaviour-of-configureawait sẽ giải trí thú vị hơn ... Mặt khác nếu bạn/nhóm của bạn rất kỷ luật và không bao giờ sử dụng các giá trị toàn cầu (như ngữ cảnh hiện tại của Http hoặc văn hóa hiện tại) bạn cũng ổn. Ngoài ra http://stackoverflow.com/questions/13489065/best-practice-to-call-configureawait-for-all-server-side-code là câu trả lời bạn đang tìm kiếm - không thực sự rõ ràng câu hỏi của bạn khác nhau như thế nào (hoặc tại sao bạn mong đợi bất kỳ câu trả lời nào khác hơn - không có điểm để gọi 'ConfigureAwait (false)' trong mã phía máy chủ) –