异步执行一个方法导致数据错乱,望解析
我有一个获取消息队列的循环,在每个循环里执行一个异步操作,代码如下
DoServerHandler doServer = new DoServerHandler(new MainClass().Do);
int i = 0;
while (que.GetAllMessages().Length != 0)
{
i++;
try
{
var messageDic = Message.GetMessageGroupByNoticeId();
IAsyncResult asyncResult = doServer.BeginInvoke(messageDic, null, null);
}
catch (Exception ex)
{
DataLogHelper.E(ex.Message, ex);
}
}
委托代理的代码new MainClass().Do如下
public class MainClass
{
int noticeId = 0;
public void Do(Dictionary<string, string> parameters)
{
KeyValuePair<bool, string> kvp = new KeyValuePair<bool, string>();
if (int.TryParse(parameters["NoticeId"], out noticeId))
{
SendEventBase baseItem = SendFactory.SendNotice(parameters);
if (baseItem != null)
kvp = baseItem.Send();
new CommonRefundTest().Test(noticeId, kvp.Key, kvp.Value);
}
}
}
public class CommonRefundTest
{
readonly object obj = new object();
public void Test(int noticeId, bool isSucceed, string refundMessage)
{
lock (this)
{
DataLogHelper.D(string.Format("NoticeId:{0},成功状态:{1},消息:{2}",
noticeId, isSucceed, refundMessage));
}
}
}
最后获取的日志乱套了,获取好几个一样的NoticeId,为什么,望解析
asynchronous
[解决办法]
需要从Message中获取messageDic的代码。
[解决办法]
Message.GetMessageGroupByNoticeId()内部是不是没有做到Get一次清除一个?