[英]To invoke a method asynchronously by using BeginInvoke and save the result in Session state
[英]How to ensure the correct state of local variables when using BeginInvoke method
我有以下代碼:
string message;
while (balloonMessages.TryDequeue(out message))
{
Console.WriteLine("Outside: {0}", message);
BeginInvoke((MethodInvoker)delegate()
{
Console.WriteLine("Inside: {0}", message);
});
}
它給了我這個輸出:
Outside: some_message
Inside:
如何確保將某些局部變量按預期傳遞給BeginInvoke
方法?
提前致謝。
你應該制作一份本地副本:
string message;
while (balloonMessages.TryDequeue(out message))
{
var localCopy = message;
Console.WriteLine("Outside: {0}", localCopy);
BeginInvoke((MethodInvoker)delegate()
{
Console.WriteLine("Inside: {0}", localCopy);
});
}
這樣,對於每個循環迭代,它始終是它自己的變量。
string message;
while (balloonMessages.TryDequeue(out message))
{
var msg=message;
Console.WriteLine("Outside: {0}", msg);
BeginInvoke((MethodInvoker)delegate()
{
Console.WriteLine("Inside: {0}", msg);
});
}
BeginInvoke不會同步運行,並且循環有時會繼續而不執行Console.Writeline語句,並且消息變量中的值會更改。 聲明新變量可確保為beginInvoke方法保留該值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.