У меня есть список элементов, которые должны быть обновлены двумя процессами. Первый - это поток пользовательского интерфейса (контролируемый пользователем), второй - фоновый процесс, который извлекает информацию из веб-службы.
Поскольку этот второй процесс связан с I/O, он подходит для задач async. Это приводит меня к нескольким вопросам:
-
Так как задачи async не запускаются в отдельных потоках, кажется, что мне не нужна какая-либо блокировка при обновлении этого списка, правильно?
-
С другой стороны, можем ли мы предположить, что задачи async никогда не будут выполняться в отдельных потоках?
-
Я говорю о приложении Windows Forms. Возможно, в будущем я хочу, чтобы это запускалось как консольное приложение. AFAIK, в консольных приложениях Задачи Async выполняются на отдельных потоках. Какую привилегированную идиому задавать задачу, если она работает в отдельном потоке? Таким образом, я могу установить блокировку, когда это необходимо.
-
Тот факт, что я не знаю, действительно ли мне нужен замок, заставляет меня удивляться, что это лучший дизайн или нет. Имеет ли смысл придерживаться
Task.Run()
даже для такого типа связанного кода IO?