C#异步Web服务调用 - 污点结果

时间:2011-07-13 10:48:46

标签: c# web-services asynchronous cloud logic

我正在异步调用网络服务发送多个请求并等待平台的响应。

我已经确定了我遇到的问题,但看不到导致它的逻辑错误,我对异步调用很新,所以请原谅我糟糕的编码!

问题是我回来的结果集包含创建的每个批次的相同50条记录。我困惑

非常感谢任何帮助,并且会发出投票,这很紧急!

我写的代码如下:

    public DataTable Delete(DataTable Data, string ObjectType)
    {
        rowCount = Data.Rows.Count;
        List<string[]> Batches = new List<string[]>();
        int time = 0;

        Batches = BatchBuilder(Data);

        results.Columns.Add("ID");
        results.Columns.Add("Success");
        results.Columns.Add("Errors");

        foreach (string[] batch in Batches)
        {
            string guid = Guid.NewGuid().ToString();
            guids.Add(guid);
            service.deleteCompleted += new deleteCompletedEventHandler(service_deleteCompleted);
            service.deleteAsync("Account", batch, guid);
        }

        while (processedCount != Batches.Count)
        {
            if (time == int.MaxValue - 1)
            {
                time = 0;
            }
            time++;
        }

        return results;
    }

    void service_deleteCompleted(object sender, deleteCompletedEventArgs e)
    {
        foreach (DeleteResult deleteResult in e.Result)
        {
            object[] resultRow = new object[3];
            if (deleteResult.id != null)
                resultRow[0] = deleteResult.id;

            resultRow[1] = deleteResult.success;

            if (deleteResult.errors != null)
                resultRow[2] = deleteResult.errors[0].Message;

            results.Rows.Add(resultRow);
        }
        processedCount++;
    }

    public List<string[]> BatchBuilder(DataTable table)
    {
        List<string[]> Batches = new List<string[]>();

        while (!batchingDone)
        {
            string[] IDs = new string[50];
            int arrayCrawler = 0;

            for (int v = 0; v < 50; v++)
            {
                IDs[arrayCrawler] = table.Rows[tableCrawler].ItemArray[0].ToString();

                arrayCrawler++;
                tableCrawler++;

                if (tableCrawler == table.Rows.Count)
                {
                    batchingDone = true;
                    break;
                }
                if (arrayCrawler == 50)
                {
                    arrayCrawler = 0;
                    break;
                }
            }

            Batches.Add(IDs);
        }

        return Batches;
    }

1 个答案:

答案 0 :(得分:4)

我怀疑您的问题来自您为每次调用重复使用的service全局变量。每次都实现一个新的服务实例。