Я сам изучаю 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;
}
Вопрос: как мне сделать часть кода внутри того же методы ждать другую часть коды для первого запуска на методе асинхронной? (По крайней мере, это одно из решений, которое, я думаю, выполнит эту работу).
бы это было единственное изменение необходимо? Я предполагаю, что нет, но я не могу понять, что мне нужно изменить. Должен ли я расчленить FindData на другие методы? –
Хорошо, я понял. –