2015-10-14 32 views
1

我正在学习C#,并且它很有趣,但我一直在试图找到解决这个问题的例子,但我还没有找到任何东西(可能是因为我不熟悉如何搜索为这个问题)。async c#后的字符串未定义#

我下面张贴的代码有一个问题:

当试图将项目添加到列表,它使用的还是不确定的字符串,因为它定义这些字符串的部分工作异步,因此在时间上不这样做。有问题的部分代码是“DataSource.Add(new 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

好吧,我现在明白了。 –