ExecutionContext.SuppressFlow();
的用途是什麼?在下面的代碼究竟是什麼被壓制?線程的ExecutionContext
我有這個測試代碼...
protected void btnSubmit_Click(object sender, EventArgs e)
{
Thread[] th = new Thread[100];
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-GB");
AsyncFlowControl cntrl = ExecutionContext.SuppressFlow();
for (int i = 0; i < th.Length; i++)
{
th[i] = new Thread(new ParameterizedThreadStart(ThreadMethod));
th[i].Name = "Thread #" + (i+1).ToString();
th[i].Start((i+1).ToString());
}
ExecutionContext.RestoreFlow();
foreach (Thread t in th)
{
t.Join();
}
Response.Write(response);
}
String response = null;
Random rnd = new Random(1000);
private void ThreadMethod(object param)
{
if (param != null)
{
string temp = param as string;
if (temp != null)
{
//To test what is the current culture I get for this thread execution
System.Globalization.CultureInfo info = Thread.CurrentThread.CurrentCulture;
for (int i = 0; i <= 10; i++)
{
Thread.Sleep(rnd.Next(2000));
response += Thread.CurrentThread.ManagedThreadId.ToString() + ":"
+ Thread.CurrentThread.Name + ": " + temp + "<br/>";
}
}
}
}
它是在應用程序開發基金會書中寫道:「默認情況下,執行上下文流向助手線程,但它是這樣做的代價,如果你想停止上下文信息的流動(提高性能,但丟失當前安全性,CULTURE和事務上下文信息),則可以使用ExecutionContext類。「,** @ nobugz:**您能否解釋一下? – 2009-12-23 11:26:13
*文化*是指當前線程語言,貨幣或數字表示等信息 – serhio 2009-12-23 11:38:16
** @ serhio:**是的,這包含在CultureInfo中,所以這意味着如果我們壓制和改變它不會得到的文化轉發給在此範圍內創建的線程?如果我們不壓制它會通過幫助線程?但是,在上面的代碼中,不管我是否抑制,線程文化都是機器默認的en-US。 – 2009-12-23 11:45:48