【发布时间】:2016-01-11 23:16:37
【问题描述】:
我正在自学 C#,这很有趣,但我一直在尝试找到解决此问题的示例,但我没有找到任何示例(可能是因为我不熟悉如何搜索此问题)。
我下面贴的代码有一个问题:
当尝试将项目添加到 List 时,它使用仍未定义的字符串,因为定义这些字符串的部分正在异步工作,因此它不会及时执行。有问题的代码部分是“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;
}
问题:如何在同一方法中制作一部分代码以等待另一部分代码首先在异步方法上运行? (至少这是我认为可以完成这项工作的一种解决方案)。
【问题讨论】:
标签: c# asynchronous