非同步 HttpContext.Current實現取值的方法
在一個專案中,為了系統執行效率更快,把一個經常用到的資料庫表通過dataset放到Application中,發現在非同步實現中每一次都會出現HttpContext.Current為null的異常,後來在網上查了好多資料,發現問這個問題的人多,回答的少,回答的也多數都是:引用System.Web,不要用HttpContext.Current.Application應該用System.Web.HttpContext.Current.Application,後來在網上看到一篇關於System.Runtime.Remoting.Messaging.CallContext這個類的詳細介紹才知道,原來HttpContext.Current是基於System.Runtime.Remoting.Messaging.CallContext這個類,子執行緒和非同步執行緒都無法訪問到主執行緒在CallContext中儲存的資料。所以在非同步執行的過程會就會出現HttpContext.Current為null的情況,為了解決子執行緒能夠得到主執行緒的HttpContext.Current資料,需要在非同步前面就把HttpContext.Current用HttpContext的方式存起來,然後能過引數的形式傳遞進去,下面看看實現的方法:
public HttpContext context
{
get { return HttpContext.Current; }
set { value = context; }
}
然後建立一個委託
public delegate string delegategetResult(HttpContext context);
下面就是實現過程的編碼
protected void Page_Load(object sender, EventArgs e)
{
context = HttpContext.Current;
delegategetResult dgt = testAsync;
IAsyncResult iar = dgt.BeginInvoke(context, null, null);
string result = dgt.EndInvoke(iar);
Response.Write(result);
}
public static string testAsync(HttpContext context)
{
if (context.Application["boolTTS"] == null)
{
Hashtable ht = (Hashtable)context.Application["TTS"];
if (ht == null)
{
ht = new Hashtable();
}
if (ht["A"] == null)
{
ht.Add("A", "A");
}
if (ht["B"] == null)
{
ht.Add("B", "B");
}
context.Application["TTS"] = ht;
}
Hashtable hts = new Hashtable();
hts = (Hashtable)context.Application["TTS"];
if (hts["A"] != null)
{
return "恭喜,中大獎呀";
}
else
{
return "我猜你快中獎了";
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-609337/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python中非同步非阻塞如何實現Python非同步
- 關於java實現同步的方法Java
- JavaScript實現非同步的4種方法JavaScript非同步
- tornado原理介紹及非同步非阻塞實現方式非同步
- WCF中關於HttpContext.Current為空的解決方法HTTPContext
- [Oracle]常用日期取值方法Oracle
- 同步、非同步、阻塞、非阻塞的區別非同步
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- Node中非同步和同步的實現非同步
- 探索:優雅地實現非同步方法的並行化非同步並行
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- 同步阻塞、同步非阻塞、多路複用的介紹
- CCTextFieldTTF使用getString()方法獲取值
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- 【方法】Html5實現檔案非同步上傳HTML非同步
- 微信小程式 傳值取值的方法總結微信小程式
- CoLAKE: 如何實現非結構性語言和結構性知識表徵的同步訓練
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- golang 中,非對稱加密的實現Golang加密
- 歸併排序的非遞迴實現排序遞迴
- 真正的 Tornado 非同步非阻塞非同步
- PHP實現非同步PHP非同步
- 資料庫讀寫分離,主從同步實現方法資料庫主從同步
- 關於元件基類取值方法的設計,求教!元件
- Js非同步機制的實現JS非同步
- 精簡的非同步Promise實現非同步Promise
- RocketMQ(九):主從同步的實現MQ主從同步