.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& Action()

{

return Task.Factory.StartNew(

...

).ContinueWith&(task=&>return Content(task.Result));

}

}

邏輯是這個邏輯

await 邏輯上也可以,這個語法糖我還沒仔細看源碼,寫法沒實際操刀,怕有問題不敢寫,照著邏輯自己試試吧

---------------------------------------------------------補充-------------------------------------------------------

public static async Task& Action(int i)
{
return await Task.Run(() =&>
{
return i;
}).ContinueWith&(task =&>
{
return task.Resu< }); }

剛才簡單看了眼,語法糖應該就是實現之前那種邏輯,不保證我沒瞎,如果我沒瞎的話,可以參照這段代碼


線程同步上下文切換也是要開銷的,不是用了Async就一定就快的。除非有了耗時的IO等操作才值得開一發Task。我現在看到http://ASP.NET MVC里到處Await,Async,還覺得自己牛逼炸了點,只能呵呵。


Windows並發編程指南 (豆瓣)

仔細看書,各種模式。。。


推薦閱讀:

請各位前輩指導下簡練代碼的思路?
IoC/AOP 這些開發範式為什麼在 .NET 平台上沒有被廣泛採用?
C# 是使用引用計數來發現垃圾對象的嗎?

TAG:NET | 非同步 | 非同步IO | ASPNETMVC | 非同步action |