Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 369
1

Task и ожидание

04.02.2017, 18:07. Показов 2107. Ответов 5
Метки нет (Все метки)

Добрый день. Подскажите пожалуйста, как дождаться завершения выполнения всех фоновых задач?

C#
1
2
3
                bool r = await Task.Factory.StartNew<bool>(
                                             () => oslist[i].Try(),
                                             TaskCreationOptions.None);
Как мне убедится, что никакие фоновые задачи в текущий момент не выполняются?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2017, 18:07
Ответы с готовыми решениями:

Ожидание task - в чем ошибка
Добрый день! Такой код отрабатывает моментально. Хотя по логике на каждый элемент массива должно...

Запуск нескольких Task-ов и ожидание их выполнения
Всем доброго времени суток. Мне необходимо отправлять сразу несколько запросов на линки какого-либо...

Task.FromResult
Ребята проверьте пожалуйста у вас это конструкция работает ? У меня пишет что FromResult не...

Task в net 4.0
Добрый день. Можно ли использовать Task в проектах Net 4.0? Попробовал имеются проблемы при...

5
Эксперт .NET
5309 / 4105 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
04.02.2017, 21:14 2
Цитата Сообщение от lonelyhunter Посмотреть сообщение
дождаться завершения выполнения всех фоновых задач
Task.WaitAll
0
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 369
04.02.2017, 21:29  [ТС] 3
Этот метод принимает в параметрах же задачи (Task), а у меня все создается способом указанным выше. Как сделать по-другому и сохранить возможность выполнения фона?

C#
1
2
3
4
                    Task<bool> pTask;
                    pTask = Task.Factory.StartNew<bool[]>(
                                             () => oslist[i].getPortsInfo(),
                                             TaskCreationOptions.None);
Теряется асинхронность.
0
Warrior
499 / 426 / 177
Регистрация: 23.11.2014
Сообщений: 932
04.02.2017, 23:51 4
Что вы хотите получить? результат задач? или использовать комбинаторы задач и получить одну?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
namespace ConsoleApplication296
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Threading.Tasks;
 
    internal class Program
    {
        private static void Main() => MainAsync().GetAwaiter().GetResult();
 
        private static async Task MainAsync()
        {
            var tasks = new List<Task<bool>>();
 
            for (var i = 0; i < 10; i++)
                tasks.Add(Create());
 
            var results = await Task.WhenAll(tasks);
 
            Debugger.Break();
        }
 
        public static async Task<bool> Create()
        {
            await Task.Delay(TimeSpan.FromSeconds(30));
 
            return true;
        }
    }
}
0
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 369
05.02.2017, 07:13  [ТС] 5
В первом сообщении, я создавал фоновую задачу, а результаты выводил в форму (после их получения.) Т.е. форма не повисала в этот момент. Но я не создавал переменных, ссылающихся на эти задачи, а потому не могу к ним обратится и проверить выполняется ли хоть одна чеоез Task.WaitAll().
При создании же переменных (в моем втором сообщении) теряется фоновость задачи, форма начинает повисать до получения результата.
0
Эксперт .NET
15269 / 11570 / 3035
Регистрация: 17.09.2011
Сообщений: 19,360
05.02.2017, 09:51 6
Цитата Сообщение от lonelyhunter Посмотреть сообщение
ак мне убедится, что никакие фоновые задачи в текущий момент не выполняются?
Добавьте созданную задачу в какой-нибудь список, а потом завершайте работу.

C#
1
2
3
4
5
6
7
8
9
10
11
var runningTasks = new List<Task>(); // переменная где-нибудь на уровне класса
 
var task = Task.Factory.StartNew<bool>(() => oslist[i].Try(), TaskCreationOptions.None); // Отсутствует await
runningTasks.Add(task);
 
bool r = await task;
runningTasks.Remove(task);
 
 
// При закрытии приложения
Task.WhenAll(runningTasks).Wait();
Синхронизацию работы со списком сделаете сами, если нужно будет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2017, 09:51

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Task.WhenAny by some condition
Добрый день всем, хотелось бы узнать ваше мнение, есть ли возможность сделать whenany по условию.....

Принцип работы Task
static void Main(string args) { var task = Task.Factory.StartNew(() =&gt; ...

Отмена async Task
Хочу: 1) запускать асинхронный метод = ok 2) выводить в textbox процесс работы = ok 3) ждать...

Task List Windows
Никто не знает как получить список задач Windows? (TaskList) Заранее спасибо. :)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.