Как узнать, работает ли мой код asyn c? - PullRequest
0 голосов
/ 07 мая 2020

Это моя первая попытка получить код для запуска asyn c, и я не могу сказать, так ли это на самом деле. В отчете о загрузке функции нет «ожидания», и есть предупреждение о том, что он будет работать синхронно.

Я пытаюсь загрузить несколько отчетов одновременно, а затем заархивировать их все в один файл.

Результат такой, как ожидалось, но я хотел бы быть уверен, что код действительно работает в asyn c.

static async Task Main(string[] args)
{
    string folderName = "Batch123";
    string fullDir = Path.Combine(ConfigurationManager.AppSettings["path"], folderName);
    Directory.CreateDirectory(fullDir);

    await RunReports(folderName);

    string zipPath = Path.Combine(ConfigurationManager.AppSettings["path"], "Zip", folderName);
    Directory.CreateDirectory(zipPath);
    ZipFile.CreateFromDirectory(fullDir, Path.Combine(fullDir, zipPath, "CRAs.zip"));           
}

private static async Task RunReports(string folderName)
{

    string[] dunsToProcess = new string[] {"d1"
                                            ,"d2"
                                            ,"d3"
                                            };

    await Task.WhenAll(dunsToProcess.Select(i => DownloadReport(i, folderName)));
}
private static async Task DownloadReroport(string DUNS, string folderName)
{
    NetworkCredential cred = new NetworkCredential(ConfigurationManager.AppSettings["networkUser"]
                                                    , ConfigurationManager.AppSettings["networkPassword"]);
    string fullPath = Path.Combine(ConfigurationManager.AppSettings["path"], folderName, string.Format("CRA for DUNS {0}.pdf", DUNS));
    WebClient wc = new WebClient();
    wc.Credentials = cred;
    wc.DownloadFile(@"http://xxxxxxx&pcDUNS=" + DUNS
                    , fullPath);
}

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

Смело высмеивайте мой код над чем угодно !!! У меня вообще не было обучения c#.

Спасибо.

1 Ответ

0 голосов
/ 07 мая 2020

Я считаю, что вы ссылаетесь на потоки и задачи и пытаетесь найти что-то асинхронное c.

Во-первых, я не уверен, что вы делаете и как это работает, когда ваш основной метод - Task , для меня это не имеет смысла, поэтому попробуйте следующее:

  1. пусть main будет по умолчанию, в этом объявлении делать нечего
  2. made class, который является делать то, что вы хотите делать (вероятно, загружает)
  3. , а затем создавал Задачи или потоки для вызова множества задач или потоков во времени. Имейте в виду, что для многих из них нет никакого смысла, вы можете ограничить количество задач / потоков, выполняемых во времени. Вы можете захотеть, чтобы все задачи были идентифицированы, или вы можете просто подождать, пока все они будут выполнены, ваша потребность и решение, но у Task есть свойства IsCompleted, IsCanceled, et c ... и если вы создаете потоки вы можете изучить следующие классы и методы:

ManualResetEvent WaitHandle

Как краткое резюме, ваш подход неверен, если я даже могу понять, что вы пытаетесь сделать в этом код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...