public override void DeleteFromProxyHandler(DeleteMessageReader request) { List <List <long> > cellIds = request.cellIds; Table table = new Table(cellIds); Condition con = new Condition(table, request.con); List <List <long> > result = new List <List <long> >(); List <Thread> threads = new List <Thread>(); foreach (List <long> cellId in cellIds) { if (Global.CloudStorage.GetServerIdByCellId(cellId[0]) == Global.MyServerId) //这一行第一列存储于本服务器 { //每行开一个线程处理 RowMessage rm = new RowMessage(); rm.cellId = cellId; rm.con = con; rm.types = request.columnTypeList; rm.result = result; Thread thread = new Thread(new ParameterizedThreadStart(DeleteThread)); threads.Add(thread); thread.Start(rm); } } foreach (Thread thr in threads) { thr.Join(); } //此时已经处理完结果 Global.CloudStorage.DeleteFromServerToDatabaseProxy(0, new DeleteResultResponceWriter(Global.MyServerId, result)); }
public override void DeleteFromClientHandler(DeleteMessageReader request, DeleteResponceWriter response) { idDict.Clear(); for (int i = 0; i < Global.ServerCount; i++) { //每个服务器挨个发送 DeleteMessageWriter dmw = new DeleteMessageWriter(request.cellIds, request.columnTypeList, request.con); Global.CloudStorage.DeleteFromProxyToDatabaseServer(i, dmw); } sem.WaitOne(); //等待服务器全部返回信息 response.cellIds = new List <List <long> >(); //将信息合并 for (int i = 0; i < Global.ServerCount; i++) { response.cellIds.AddRange(idDict[i]); } }