Я работаю над менеджером резервного копирования для некоторых Quest (устройств мониторинга критической инфраструктуры), когда я запускаю Код, кажется, что он выполняет мои задачи, добавляя их в список задач перед вызовом .WhenAll.затем при вызове .WhenAll я получаю исключения исключений и агрегировать исключения.Я использую telnet nuget, вы можете предположить, что telnet работает так же, как и сам по себе, и при этом синхронно
Я новичок в Async / Await в c #.Я попытался избавиться от части telnet и просто запустить HTTP и наоборот.Я удалил асинхронный метод (runBackupAsync) и запустил напрямую в асинхронный класс (BackupSingleBoxAsync) без изменений
(BackupSingleBoxAsync)
private Quest QuestBox = new Quest();
public BackupSingleBoxAsync(Quest q)
{
this.QuestBox.IP = q.IP;
this.QuestBox.User = q.User;
this.QuestBox.Password = q.Password;
this.QuestBox.Type = q.Type;
}
public async Task<Quest> StartAsync()
{
Quest tempQuest = new Quest();
while (QuestBox.User != null && QuestBox.Password != null)
{
if (QuestBox.Type.ToLower().Contains("mini"))
{
HttpDownload getRes = new HttpDownload(QuestBox);
tempQuest = await getRes.Start();
}
else
{
Telnet getRes = new Telnet(QuestBox);
tempQuest = await getRes.Start();
}
}
this.QuestBox.Results = tempQuest.Results;
return QuestBox;
}
(контроллер резервного копирования)
GetConfigs config = new GetConfigs(QuestMasterList);
List<Quest> questAterDownload = config.GetAll().Result;
(GET CONFIGS)
public List<Quest> QuestMasterList = new List<Quest>();
public GetConfigs(List<Quest> list)
{
this.QuestMasterList.AddRange(list);
}
public async Task<List<Quest>> GetAll()
{
List<Task<Quest>> task_list = new List<Task<Quest>>();
foreach (var quest in QuestMasterList)
{
task_list.Add(runBackupAsync(quest));
}
await Task.WhenAll(task_list);
List<Quest> tempQuests = new List<Quest>();
foreach (var tsk_rslt in task_list)
{
tempQuests.Add(tsk_rslt.Result);
}
return tempQuests;
}
private async Task<Quest> runBackupAsync(Quest quest)
{
BackupSingleBoxAsync backup = new BackupSingleBoxAsync(quest);
Quest res = backup.StartAsync().Result;
return res;
}
(Quest)
public string IP;
public string User;
public string Password;
public string Type;
public bool Success;
public bool Diff;
public List<string> Results = new List<string>();
Я ожидаю, что он вернет список типов квестовых ящиков, но вместо этого он дастисключения со ссылками на нуль и совокупные исключения