powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с потоками
60 сообщений из 60, показаны все 3 страниц
Проблема с потоками
    #39643661
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как продолжить выполнения кода после завершения потока BackgroundWorker:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
  private void button1_Click(object sender, EventArgs e)
        {
            
            bw = new BackgroundWorker();
            bw.DoWork += (obj, ea) => TasksAsync(1);
            bw.RunWorkerAsync();
            //здесь подождать пока не выполнится поток
/////продолжить выполнение кода, ниже код
        }
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643666
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,
вам советовали Async\Await и свежие технологии по потокам.
Игнорируете?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643674
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
не могу в них разобраться, а это работает
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643676
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-да, отличный аргумент.
При этом с BackgroundWorker вы тоже не можете разобраться.
Какой смысл грызть кактус?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11не могу в них разобраться
ничего сложного. Ты не пытался

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private Task MyAsync()
{
	return Task.Run(() =>
		{
			// код в потоке
			...
		}
		);
}

ButtonsClick()
{
	await MyAsync();
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643680
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
там я уже разобрался, просто через this.Invoke((Action)delegate передаю значения прогресс бару.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643681
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123OlegEgorov11не могу в них разобраться
ничего сложного. Ты не пытался

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private Task MyAsync()
{
	return Task.Run(() =>
		{
			// код в потоке
			...
		}
		);
}

ButtonsClick()
{
	await MyAsync();
}



В private Task MyAsync() я объявляю код, а по нажатию кнопки пишу:

Код: c#
1.
2.
3.
4.
5.
 private void button1_Click(object sender, EventArgs e)
        {
            MyAsync();
            await MyAsync();
        }


Или где нужно объявлять этот await?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643682
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, мне не понятно что делать с await. Как-бы с BackgroundWorker у меня все работает все как нужно, ну чтобы форма не висла и прогресс бары заполнялись, но студия мне пишет, что не плохо бы было ввести await, я не могу понять как его использовать.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643683
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11Shocker.Pro, мне не понятно что делать с await. Как-бы с BackgroundWorker у меня все работает все как нужно, ну чтобы форма не висла и прогресс бары заполнялись, но студия мне пишет, что не плохо бы было ввести await, я не могу понять как его использовать.

Продолжайте использовать BackgroundWorker.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643684
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegEgorov11, я понял свою ошибку, и сделал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
       private ASYNC void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Style = ProgressBarStyle.Marquee;
            progressBar1.MarqueeAnimationSpeed = 30;
            MyAsync();
            await MyAsync();
            progressBar1.Style = ProgressBarStyle.Continuous;
            progressBar1.MarqueeAnimationSpeed = 0;
        }
    }
}


я не добавил ключевое слово async кнопке, теперь работает как я и хотел, но он выполняется два раза, почему?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643685
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11В private Task MyAsync() я объявляю код,
код писать в месте где мой комментарий // код в потоке
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643686
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,
почему? я же хочу научиться
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643688
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11а по нажатию кнопки пишу:

Код: c#
1.
2.
3.
4.
5.
 private void button1_Click(object sender, EventArgs e)
        {
            MyAsync();
            await MyAsync();
        }


нет. Как у меня выше.

OlegEgorov11Или где нужно объявлять этот await?
я вам уже всё написал. Только вставить код где мой коммент и повесить на стену в рамочку))
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643690
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11но он выполняется два раза, почему?
в ButtonClick()
должна быть только одна строка:
await MyAsync();
больше ничего.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643691
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, но это же так не работает...
пишет 2 ошибки, 1 на ButtonsClick() - метод должен иметь тип возвращаемого значения, 2 - на await, что он должен использоваться только с Async
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643692
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegEgorov11, Большое спасибо, так работает:

Код: 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.
32.
33.
34.
35.
36.
namespace WindowsFormsApplication12
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            progress();
        }

        private void progress()
        {
            progressBar1.Style = ProgressBarStyle.Continuous;
            progressBar1.MarqueeAnimationSpeed = 0;
        }
   private Task MyAsync()
{
	return Task.Run(() =>
		{
			  ProcessStartInfo psi;
                psi = new ProcessStartInfo("cmd", @"/c echo hello word" + "&" + "pause");
                Process.Start(psi).WaitForExit();
		});
		
}
               
        private async void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Style = ProgressBarStyle.Marquee;
            progressBar1.MarqueeAnimationSpeed = 30;
          await MyAsync();
            progressBar1.Style = ProgressBarStyle.Continuous;
            progressBar1.MarqueeAnimationSpeed = 0;
        }
    }
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643693
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt,
почему? я же хочу научиться

чему научиться? async/await имеет смысл использовать для асинхронных IO операций, запись/чтение файлов, обращения к БД (в том случае, если провайдер баз данных поддерживает асинхронный АПИ, например, провайдеры оракла не умеют).

если заворачиваете что-то в async/await, значит ВСЁ внутри должно следовать этому паттерну. поэтому сегодня многие современные программы пишут в стиле async-first.

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

от BackgroundWorker-а отказываться не стоит, он прекрасно решает свою задачу.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643694
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123в ButtonClick()
должна быть только одна строка:
await MyAsync();
больше ничего.

такие советы как мёртвому припарка. человеку надо идти и доку курить, читать книжки, а не вставить await без малейшего понимания что он сделал. в формате форума этому не научить.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643695
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11
Код: c#
1.
2.
3.
4.
5.
6.
return Task.Run(() =>
		{
			  ProcessStartInfo psi;
                psi = new ProcessStartInfo("cmd", @"/c echo hello word" + "&" + "pause");
                Process.Start(psi).WaitForExit();
		});



вот зачем человека фигне научили?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643697
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11на await, что он должен использоваться только с Async
да
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
private async void MyRun()
{
	await MyAsync();
}

private Task MyAsync()
{
	return Task.Run(() =>
		{
			// код в потоке
			...
		}
		);
}

ButtonsClick()
{
	MyRun();
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643699
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643701
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttвот зачем человека фигне научили?
это hello world за 3 минуты и просто для понимания.
Что и сделал MS супротив Java своим await .
..
Если получится в три минуты и просто рассказать почему фигня, то велкам.
Думаю, не получится.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643702
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttasync/await имеет смысл использовать для асинхронных IO операций, запись/чтение файлов, обращения к БД (в том случае, если провайдер баз данных поддерживает асинхронный АПИ, например, провайдеры оракла не умеют).
у меня работает и не в том случае. Когда нет поддержки никем ниже. Это обычный поток.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643703
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что неверно заставлять человека сразу разбираться в async\await, тем более, что это по сути только сахар для TPL.
В первую очередь нужно разобраться, что такое TPL, как работать с Task'ами, что такое асинхронное выполнение, почему асинхронное выполнение не равно многопоточному.
Затем разобраться с синхронизацией в многопоточных приложениях, мониторы, симафоры, Read\Write локеры и прочие способы.
А потом уже переходить к async\await, иначе последний будет крайне непонятным. Если человек использует await, но не понимает, как это работает, что происходит после указания этого ключевого слова, будет много боли.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643704
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
в принципе, async\awaite проще писать чем BackgroundWorker, я попробовал передать данные двум прогресс барам и у меня все получилось так как я хотел. Но еще один вопрос, когда я искал информацию по потокам, то где то видел что для async\awaite необходим net framework 4.5 и выше, так ли это?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643705
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, да ладно Вам, я задал конкретный вопрос, он просто ответил по сути. На примере проще разобраться, я понимаю что awaite приостанавливает выполнение кода до выполнения потока, я просто не мог понять куда его поставить, потому что не присваивал кнопке свойсво async
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643706
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

писать то может и проще, но если вы не понимаете, что пишите, это плохая практика.
проще, не всегда лучше. Если вы не понимаете ту или иную технологию, то лучше воспользоваться той, которую вы понимаете.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643707
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesчто это по сути только сахар для TPL

серьёзно? ну это же неправда.


Roman MejtesЗатем разобраться с синхронизацией в многопоточных приложениях, мониторы, симафоры, Read\Write локеры и прочие способы.

стандартное уже классическое клише непонимание разницы между многопоточностью и асинхронность.

приехалит.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643710
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

вы не понимаете, как работает await, всё, что могу сказать вам по этому поводу :)
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643711
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему?

если не собираетесь использовать асинхронный апи (TAP) при работе с СУБД и файлами, то да. вам поможет BackgroundWorker. можно и запускать потоки через Task.Run, но в WinForms есть уже готовые средства, которые решают это задачу и решали ещё 10 лет назад.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643712
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11в принципе, async\awaite проще писать
да. Этого и MS хотел. Чтобы новички не пугались шарп кода))).

OlegEgorov11для async\awaite необходим net framework 4.5
вроде с 2012 года.
Мало?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643713
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Если получится в три минуты и просто рассказать почему фигня, то велкам.
Думаю, не получится.

ты просишь объяснить, почему не нужно забивать гвозди микроскопом, потому что «смотри, как лихо у меня получается». даже стараться не буду.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643716
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, Проблема в том, что я не первый день только делаю это, а vs работаю вторую неделю, но я быстро учусь
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643717
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123Если получится в три минуты и просто рассказать почему фигня, то велкам.
Думаю, не получится.

ты просишь объяснить, почему не нужно забивать гвозди микроскопом, потому что «смотри, как лихо у меня получается». даже стараться не буду.
на том и расходимся)
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643718
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttOlegEgorov11hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему?

если не собираетесь использовать асинхронный апи (TAP) при работе с СУБД и файлами, то да. вам поможет BackgroundWorker. можно и запускать потоки через Task.Run, но в WinForms есть уже готовые средства, которые решают это задачу и решали ещё 10 лет назад.
Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное?
Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643719
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async
connection.OpenAsync
command.ExeucteReaderAsync
reader.ReadAsync
если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643720
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesOlegEgorov11,

вы не понимаете, как работает await, всё, что могу сказать вам по этому поводу :)
В чем моя ошибка? можете объяснить на примере? или кинуть ссылку по теме? awaite же только приостанавливает выполнение потока, чтобы у программы была возможность подождать значения которое вернет поток, для этого применяем awaite, ведь так же? на пример если в потоке проходят вычисления которые нужны для дальнейшей работы программы, используем awaite и ждем вычислений от потока, продолжаем выполнение программы с данными от потока, я прав?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643721
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesOlegEgorov11,

у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async
connection.OpenAsync
command.ExeucteReaderAsync
reader.ReadAsync
если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует.

просто я еще использую утилиты cmd там, не только sql
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643722
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11В чем моя ошибка?
нет у тебя ошибки.
OlegEgorov11так как выполняются запросы на sql servere?
просто есть ещё вариант когда MyAsunc() выше есть прямо в драйвере СУБД.
Тогда вы пишите:

Код: c#
1.
await ДрайверЗапросAsync.Выполнить()
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643723
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesOlegEgorov11,

у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async
connection.OpenAsync
command.ExeucteReaderAsync
reader.ReadAsync
если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует.

и там проблема с временными таблицами, нужно чтобы они были в пределах одного коннекта, то есть там наполняется временая таблица потом с ней работает cmd
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643724
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное?
Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы

асинхронное. но нужно, чтобы обращения к БД и записи файлов делались через методы с суффиксом Async. вы не желаете почитать документацию? или хотя бы статейки на хабре?

https://habr.com/post/139734/
https://habr.com/post/261649/
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643725
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttOlegEgorov11Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное?
Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы

асинхронное. но нужно, чтобы обращения к БД и записи файлов делались через методы с суффиксом Async. вы не желаете почитать документацию? или хотя бы статейки на хабре?

https://habr.com/post/139734/
https://habr.com/post/261649/
спасибо за ссылки, обязательно изучу
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643726
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643729
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

асинхронный метод может выполняться и в основном потоке.
У вас есть 2 асинхронных метода, которые вы запустили в 1 STA потоке.
Сперва выполнилось 20% 1 метода, затем 30% второго, затем выполнился код формы (обработка сообщений (ввода), обновление картинки (rendering), потом вернулась к первому и выполнила еще 80%, а потом вернулась ко второму и выполнила еще 70%. Таким образом в 1 потоке, выполнилось 2 метода асинхронно, при этом еще выполнялся код вашей формы, который вроде как и не зависал, но методы выполнялись.
Это если очень по простому описать, как будут выполняться 2 асинхронных метода одновременно в 1 потоке.
Вам будет казаться, что они оба работают, но на самом деле они работаю "по очереди", вытесняя друг друга.

А если вы запустите 2 потока, то они могут выполняться одновременно (при условии наличия 2 процессоров\ядер).
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643730
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, а в синхронном варианте, вы запустили метод 1 и пока он не вернет управление, туда от куда был вызван, выполнение кода формы не будет, то есть обработка сообщений, рендеринг не будут выполняться. Так как будет ожидаться завершение метода. и форма зависнет
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643731
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
для новичка такое сложное объяснение не подходит. Увы.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643734
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt,

на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd?
Код: c#
1.
2.
3.
4.
{
RunSQL(); // внутри await  ДрайверЗапросAsync.Выполнить()
await Run_cmd();
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643735
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt,

на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd?

Нет, не будет виснуть, так как операция будет выполнена асинхронно. Т.е. пока там БД «думает», основной поток может свободно обрабатывать UI. Отличается от Task.Run это тем, что не расходуется напрасно лишний поток и контексты переключения потоков. Т.е. так правильно. А Task.Run это костыль.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643736
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
Код: c#
1.
2.
3.
4.
{
RunSQL(); // внутри await  ДрайверЗапросAsync.Выполнить()
await Run_cmd();
}



фигню написал.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643739
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123
Код: c#
1.
2.
3.
4.
{
RunSQL(); // внутри await  ДрайверЗапросAsync.Выполнить()
await Run_cmd();
}



фигню написал.
нет. Не фигню. А точно по ТЗ автора топика))
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643741
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123нет. Не фигню. А точно по ТЗ автора топика))

await-ить надо всё
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643742
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,
await cmd.ExecuteNonQueryAsync(); если я таким образом запущу sql запрос, будет ли он выполняться асинхронно?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643744
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11cmd
у cmd спроси.
Судя по XXXXAsync() - будет.
Если не наврал.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643746
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt,
await cmd.ExecuteNonQueryAsync(); если я таким образом запущу sql запрос, будет ли он выполняться асинхронно?

Да.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643749
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123OlegEgorov11cmd
у cmd спроси.
Судя по XXXXAsync() - будет.
Если не наврал.
не совсем понял
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643750
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, тогда вопрос, если я запущу асинхронно sql запросы, форма виснуть не будет, но тогда они запустятся все разом, и cmd, таким образом все сломается, потому что следующим запросам нечего будет выгружать, потому что предыдущие не сделают ничего
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643754
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11но тогда они запустятся все разом
Код: c#
1.
2.
3.
await Query1
await Query2
await Query3


все три будут друг за другом но форма виснуть не будет.
Это скрыто, но код возвращается назад каждый раз.
...
Хорош теории - пробуй код!
Удачи!
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643755
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt, тогда вопрос, если я запущу асинхронно sql запросы, форма виснуть не будет, но тогда они запустятся все разом, и cmd, таким образом все сломается, потому что следующим запросам нечего будет выгружать, потому что предыдущие не сделают ничего

асинхронно это не параллельно. все будет выполнено по очереди.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643819
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttсегодня многие современные программы пишут в стиле async-first .это ты сам придумал термин или это уже устоявшаяся терминология?
А вы пишете суффикс Async к названию каждого метода? А то получается webapi-аппликация чуть менее чем полностью состоит из асинхронных методов, включая методы контроллеров, есть ли смысл использовать суффикс?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643844
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

тот код, который идет после выполнения асинхронного метода с Await будет выполнен по его завершению. Возврата не будет, будет переход. Ваш метод будет разбит на части, которые будут выполняться последовательно, после каждой операции с await, будет выполняться следующий блок, который написан в методе.
Это всё равно, что написать
var task = Task.Run(MyAsyncCode);
task.ContinueWith(MyNextCode);
грубо говоря
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с потоками
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]