2015-10-14 5 views
1

Я сам изучаю C#, и это было весело, но я пытался найти примеры для решения этой проблемы, но я не нашел их (может быть, потому, что я не знаком с поиском для этого вопроса).string undefined after async C#

код я выкладываю ниже есть одна проблема:

При попытке добавить элемент в список он использует еще неопределенные строки, потому что та часть, которая определяет эти строки работает асинхр так это не делает его во времени , Часть кода, о которой идет речь, это «DataSource.Add (новый Data4TheGrid() {...}); ближе к концу кода. Он запускается до ответа RestRequest, чтобы определить эти переменные.

public class Data4TheGrid 
{ 
    public string Data { get; set; } 
    public string Aa { get; set; } 
    public string Ab { get; set; } 
    public string Ac { get; set; } 
    public string Ad { get; set; } 
    public string Ae { get; set; } 
    public string Af { get; set; } 
    public string Ag { get; set; } 
} 

public async void FindData(string mes, string ano) 
{ 
    string[] vendedores = { "aa", "ab", "ac", "ad", "ae", "af", "ag" }; 
    Uri BaseUrl = new Uri("http://example.com/rest.asmx"); 
    var today = DateTime.Today; 
    var hjDia = today.Day; 
    var hjMes = today.Month; 
    var hjAno = today.Year; 
    var DataSource = new List<Data4TheGrid>(); 

    if (hjMes.ToString() == mes && hjAno.ToString() == ano) 
    { 
     var varDia = 1; 
     while (varDia <= hjDia) 
     { 
      string aa; 
      string ab; 
      string ac; 
      string ad; 
      string ae; 
      string af; 
      string ag; 
      foreach (var vendedor in vendedores) 
      { 
       var client = new RestClient(BaseUrl); 
       var request = new RestRequest("/DayValue", Method.POST); 
       request.RequestFormat = DataFormat.Json; 
       request.AddBody(new { dia = Convert.ToString(varDia), mes = mes, ano = ano, vendedor = vendedor }); 
       var restResponse = await client.ExecuteTaskAsync(request); 
       JsonResponse fstResp = JsonConvert.DeserializeObject<JsonResponse>(restResponse.Content); 
       dValue dValue = JsonConvert.DeserializeObject<dValue>(fstResp.d); 
       string valorDia = Convert.ToDecimal(dValue.Valor).ToString("c2"); 
       switch (vendedor) 
       { 
        case "aa": 
         aa = valorDia; 
         break; 
        case "ab": 
         ab = valorDia; 
         break; 
        case "ac": 
         ac = valorDia; 
         break; 
        case "ad": 
         ad = valorDia; 
         break; 
        case "ae": 
         ae = valorDia; 
         break; 
        case "af": 
         af = valorDia; 
         break; 
        case "ag": 
         ag = valorDia; 
         break; 
       } 
      } 
      DataSource.Add(new Data4TheGrid() 
      { 
       Data = varDia + "/" + today.ToString("MM/yyyy"), 
       Aa = aa, 
       Ab = ab, 
       Ac = ac, 
       Ad = ad, 
       Ae = ae, 
       Af = af, 
       Ag = ag 
      }); 
      } 
      varDia++; 
    } 
    dataGridView1.DataSource = DataSource; 
} 

Вопрос: как мне сделать часть кода внутри того же методы ждать другую часть коды для первого запуска на методе асинхронной? (По крайней мере, это одно из решений, которое, я думаю, выполнит эту работу).

ответ

2

изменение

public async void FindData(string mes, string ano) 

в

public async Task FindData(string mes, string ano) 

Обратитесь к подобной проблеме здесь: How to wait for async method to complete?

+0

бы это было единственное изменение необходимо? Я предполагаю, что нет, но я не могу понять, что мне нужно изменить. Должен ли я расчленить FindData на другие методы? –

+0

Хорошо, я понял. –

Смежные вопросы