.net怎麼實現自己的非同步方法?
現在的mvc項目中都是同步action,想快速的改為非同步action,但不想改太多邏輯代碼。
於是打算
return await Task.run(()=》{同步方法});這樣是否可行?如果不行,那麼最裡層的非同步方法是怎麼實現的?
可以是可以,但是如果你沒有什麼IO操作的話,你這樣改並沒有什麼意義。
async 或者多線程 大部分場景並不能提升性能,除非你調用的介面實現了async並且是真正帶IO操作才能提升性能;不當使用反而會損耗性能,線程切換開銷等。
建議閱讀 Should I expose asynchronous wrappers for synchronous methods?
aync的還有一種使用場景就是如文中說的Offloading,比如UI主線程應該避免做長時間的操作, 可以Offloading到background線程
自己創建線程 自己來玩。 但是線程怎麼切換你還是要聽os的
[ SessionState(SessionStateBehavior.ReadOnly) ] //有時候沒這個S端會不非同步,不曉得何故.
class xxController:AsyncController
{
public Task&
{
return Task.Factory.StartNew(
...
).ContinueWith&
}
}
邏輯是這個邏輯
await 邏輯上也可以,這個語法糖我還沒仔細看源碼,寫法沒實際操刀,怕有問題不敢寫,照著邏輯自己試試吧
---------------------------------------------------------補充-------------------------------------------------------
public static async Task&
{
return await Task.Run(() =&>
{
return i;
}).ContinueWith&
{
return task.Resu<
});
}
剛才簡單看了眼,語法糖應該就是實現之前那種邏輯,不保證我沒瞎,如果我沒瞎的話,可以參照這段代碼
線程同步上下文切換也是要開銷的,不是用了Async就一定就快的。除非有了耗時的IO等操作才值得開一發Task。我現在看到http://ASP.NET MVC里到處Await,Async,還覺得自己牛逼炸了點,只能呵呵。
Windows並發編程指南 (豆瓣) 仔細看書,各種模式。。。
推薦閱讀:
※請各位前輩指導下簡練代碼的思路?
※IoC/AOP 這些開發範式為什麼在 .NET 平台上沒有被廣泛採用?
※C# 是使用引用計數來發現垃圾對象的嗎?