问题描述
定入了delegate如下delegateboolInsertDataAsync(stringsSQL));privateboolInsertData(stringsSQL){//insertdatabysqlstring}privatevoidEndInsertData(IAsyncResultiar){InsertDataAsyncpasser=(InsertDataAsync)iar.AsyncState;boolbResult=passer.EndInvoke(iar);}调用如下Main{stringsSQL="insertintoAvalues('aaa",DateTime.Now.ToString("yyyy-MM-ddHH:mm:ssfff"));while(true){InsertDataAsyncinsert=newInsertDataAsync(InsertData);IAsyncResultiar=parser.BeginInvoke(sSQL,newAsyncCallback(EndInsertData),insert);} 上面方式在Main代码段中插入数据到数据库不能做到接while(true)循环的次序插入数据,请问如何做到按while(true)循环插入数据?当然上面代码只是为了例出情景,用ManualResetEventclass是否可以,其他方法呢?
解决方案
解决方案二:
异步没法保证执行顺序因为你要保证插入顺序,所以没法多个插入同时执行。直接在后台线程里面执行while循环就不就好了吗
解决方案三:
要按顺序来干嘛要异步调用?
解决方案四:
定入了delegate如下delegateboolInsertDataAsync(stringsSQL));privateboolInsertData(stringsSQL){//insertdatabysqlstring}privatevoidEndInsertData(IAsyncResultiar){InsertDataAsyncpasser=(InsertDataAsync)iar.AsyncState;boolbResult=passer.EndInvoke(iar);}调用如下Main{stringsSQL="";inti=0;while(true){i++;sSQL="insertintoAvalue(i,DateTime.Now.ToString("yyyy-MM-ddHH:mm:ssfff"));InsertDataAsyncinsert=newInsertDataAsync(InsertData);IAsyncResultiar=parser.BeginInvoke(sSQL,newAsyncCallback(EndInsertData),insert);} 上面方式在Main代码段中插入数据到数据库,但不能做到百分百按while(true)循环的i和插入时间递增次序来插入数据,请问如何做到按while(true)循环插入数据?当然上面代码只是为了例出情景,用ManualResetEventclass是否可以,其他方法呢?
解决方案五:
引用1楼songbing774933的回复:
异步没法保证执行顺序因为你要保证插入顺序,所以没法多个插入同时执行。直接在后台线程里面执行while循环就不就好了吗
实际情况是这样,client不断发有包头的xml字节包过来,server收到以后,拆出xml然后解析插入到数据库中我的做法是,把收到的每个包放到Queue<T>中,然后引发Queue的CollectionChanged事件,并在事件中通过字符串操作,得到xml格式字符串,然后用 IAsyncResult 方式操作XML并插入数据库中,可是收到xml包的次序和插入数据库次序不一致,有时收到xml早的反而插入晚,