0
所以我在我的基本控制器這種方法:殉異步/ await方法調用
protected async Task<KeyValuePair<bool, string>> ExecuteSimpleQuery(Func<Task<bool>> service)
{
var success = false;
var message = string.Empty;
try
{
success = await service.Invoke();
}
catch (Exception exception)
{
message = exception.Message;
success = false;
}
return new KeyValuePair<bool, string>(success, message);
}
我想用這樣的:
public async Task<ActionResult> Login(RegisterDto register)
{
var objectStore =
await this.ExecuteSimpleQuery(async() => await this.securityService.LoginAsync(register.UserName, register.Password, true));
if (objectStore.Key)
{
return this.RedirectToAction("Index", "Toolbox");
}
this.TempData["error"] = objectStore.Value;
return this.View(register);
}
我路過那麼通過對ExecuteSimpleQuery
是awaitable
方法LoginAsync
,我只是想確保我正在等待該方法。
我的思維過程是:
LoginAsync
返回Task<bool>
因此Func
不得不返回。- 當它通過它時,你可以
await
它,所以呢。 - 因爲
Func
回報Task<bool>
內ExecuteSimpleQuery
可以await
它在那裏,所以應該 ExecuteSimpleQuery
正在等待的方法,因此必須具有async
關鍵字,因此必須返回Task<T>
。- 最後一點傳播到
Login
動作,該方法返回Task<T>
,因此它可以等待,所以應該。
我是否關閉?
爲什麼這麼複雜?你是誰將登錄調用委託給'ExecuteSimpleQuery'? – 2014-10-19 10:32:45
使用基於服務的體系結構我有一種調用服務的非常一致的方式,所以不必每次都寫出'try ... catch',而是每次寫入一次並處理相同的內容。只是更容易,更乏味 – 2014-10-19 10:35:12