我正在構建一個WCF服務,我需要一些關於構建異步方法的說明。WCF資源異步調用
功能應該是當請求到達時,它包含以authorizationToken的形式的認證信息,該認證信息被檢查並且如果授權通過,則執行實際功能。
首先,Service1.cs包含此方法:
public async Task<string> CreateClass(string name, int departmentId)
{
Class result = null;
bool authResult = await System.Threading.Tasks.Task.Run(() =>
{
return authCtr.AuthenticateToken();
});
if (authResult)
{
result = await System.Threading.Tasks.Task.Run(() =>
{
return classCtr.CreateClass(name, departmentId);
});
}
return result != null ?
JsonConvert.SerializeObject(result, Formatting.Indented) :
string.Format(response.StatusCode + "," + response.StatusDescription);
}
兩種方法AuthenticateToken()和CreateClass()是同步於該示例,並且他們負責在各表創建和讀取DB操作。 在閱讀了更多內容之後,我想到修改這兩種方法是異步並修改了前面的代碼,但是在閱讀越來越多的內容後,混淆命中,我無法確定哪種方式更好/更正確。如果我選擇的話,我會去重寫所有的方法是異步,並呼籲他們的服務爲:
public async Task<string> CreateClass(string name, int departmentId)
{
Class result = null;
if(await authCtr.AuthenticateToken())
{
result = await classCtr.CreateClass(name, departmentId);
}
return result != null ?
JsonConvert.SerializeObject(result, Formatting.Indented) :
string.Format(response.StatusCode + "," + response.StatusDescription);
}
所以問題1:任何的這些方式實際上是異步的,或者它僅僅是一個一塌糊塗?
問題2:如果我更改控制器方法異步,就足夠讓他們看起來像這樣對它們進行修改:
return await System.Threading.Tasks.Task.Run(() =>
{
//DO DB STUFF
}
很棒的信息,謝謝! 因此,如果我要在控制器內部使用await db.SaveChangesAsync(),那將是「實際.net框架的最後一個級別」。我對嗎? – Crunchh
@Crunchh沒錯。 – zaitsman