首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

异步施行一个方法导致数据错乱,望解析

2013-08-01 
异步执行一个方法导致数据错乱,望解析我有一个获取消息队列的循环,在每个循环里执行一个异步操作,代码如下

异步执行一个方法导致数据错乱,望解析
我有一个获取消息队列的循环,在每个循环里执行一个异步操作,代码如下

 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一次清除一个?

热点排行