Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任务覆盖任务_C#_Asynchronous_Windows Phone 7.1 - Fatal编程技术网

C# 任务覆盖任务

C# 任务覆盖任务,c#,asynchronous,windows-phone-7.1,C#,Asynchronous,Windows Phone 7.1,我的任务是从服务器获取内容。问题是,有时一个任务会覆盖以前的任务,因此我会得到两次相同的结果 我的代码: Task<string> task = Server.GetText(); string result = await task; if (result == "\n") { ..... } else { string[] sarray

我的任务是从服务器获取内容。问题是,有时一个任务会覆盖以前的任务,因此我会得到两次相同的结果

我的代码:

 Task<string> task = Server.GetText();
        string result = await task;
        if (result == "\n")
        {
            .....
        }
        else
        {
            string[] sarray = result.Split('|');

            App.MainList.Add(new etc.Text(sarray[0], sarray[1], sarray[2], sarray[3], sarray[4]));

            App.Number++;
        }
Task=Server.GetText();
字符串结果=等待任务;
如果(结果=“\n”)
{
.....
}
其他的
{
字符串[]sarray=result.Split(“|”);
App.MainList.Add(新的etc.Text(sarray[0]、sarray[1]、sarray[2]、sarray[3]、sarray[4]);
App.Number++;
}
GetText():

公共静态异步任务GetText()
{
如果(应用程序编号

我的意思是覆盖旧的结果,最后我不得不放弃输入。我如何解决这个问题

当第一个方法进入时(可能是因为用户按钮按下),您正在使用
await
调用
GetText()
;让我们假设
App.Number
1
当您第一次这样做时。因为
await
执行被挂起,直到
GetText()
返回,但您的GUI没有返回!假设用户再次按下相同的按钮。
GetText()
将再次被调用,并且
App.Number
仍将是
1
,因为第一个
GetText()
尚未返回。由于查询是基于
App.Number
生成的,因此显然会得到两个相同的结果

当第一个
GetText()
返回时,您将增加
App.Number
,因此现在是
2
;当第二个
GetText()返回时
返回
App.Number
再次实现!您不仅两次获得
App.Number==1
的结果,还将完全跳过
App.Number==2
的结果

根据这些数字的含义,您将有多种解决方案:在调用
GetText()之前增加
App.Number
并将数字作为参数传递,使该方法不可重入,无论对您有效。例如,如果请求的顺序有某种意义,那么最好的选择是禁用该按钮,因为并行发送的HTTP请求不能保证按启动顺序完成。例如,您的
GetText(2)
可以在
GetText(1)
之前轻松返回;
GetText(n)
也可能因为某些错误而永远不会返回


你现在知道为什么你看到了你看到的东西,但我不能提出解决方案,因为我实际上不知道正确的行为应该是什么。这取决于你!

这看起来像是线程问题。我假设App.Number从1开始,App.Total是4,但我认为这会发生在App.Number没有给我们n的任何值上我们不知道
Server.GetText()
做了什么,也不知道您是如何诊断的。在我们能够帮助您之前,您需要澄清很多。我编辑了这个问题“它覆盖了旧结果”是什么意思;我仍然相信这是由于重新进入造成的(只有在您从服务器获取文本后,您才会增加App.Number,因此,用户在服务器响应之前按两次按钮将启动两个相同的查询,这两个查询都将返回,但当它们返回时,App.Number将不再具有预期值)我的意思是覆盖旧的结果,最后我不得不放弃输入。我如何解决这个问题?如果用户之前点击按钮,这没有问题,但它不应该覆盖旧的结果谢谢你的回答。我还有一个问题:顺序不介意,只要没有数字被跳过或两次。我真的不喜欢这样做按钮不可单击。我是否应该尝试使用参数的解决方案?最简单的解决方案:移动应用程序。数字什么是最好的方法?
public static async Task<string> GetText()
    {
        if (App.Number <= App.Total)
        {
            HttpClient http = new System.Net.Http.HttpClient();
            HttpResponseMessage response = await http.GetAsync(queryuri + "?w=" + App.Number.ToString());
            return await response.Content.ReadAsStringAsync();
        }

        else
        {
            App.Number = 1;
            HttpClient http = new System.Net.Http.HttpClient();
            HttpResponseMessage response = await http.GetAsync(queryuri + "?w=" + App.Number.ToString());
            return await response.Content.ReadAsStringAsync();
        }

    }