c# - Task overrides task -


i have task fetch content server. problem is, task overrides task before, 2 times same result.

my code:

 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++;         } 

gettext():

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();         }      } 

i mean overwritting old result, in end have excact entries. how can solve problem?

when first method enters (presumably because of user button press) you're calling gettext() using await; let's assume app.number 1 when first this. because of await execution suspended right there until gettext() returns, gui not! let's assume user presses same button again. gettext() again called , app.number still 1 because first gettext() hasn't yet returned. since query built based on app.number you're going 2 identical results.

when first gettext() returns you're going increment app.number it's 2; when second gettext() returns app.number gets implemented once more! you're not getting result app.number==1 twice, you're going complitely skip result app.number==2!

depending on meaning of numbers is, you'd have multiple solutions: increment app.number before call gettext() , pass number parameter, make method non-re-entrant, whatever works you. if example there's meaning in order of request, best option disable button because http requests sent in parallel aren't guaranteed complete in order started. example gettext(2) return before gettext(1); it's possible gettext(n) might never return because of error.

you know why you're seeing you're seeing, can't suggest solution because don't know correct behavior should be. that's you!


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -

debian - 500 Error upon login into Plesk Admin - auth.php3? -