|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Roman Mejtes, да ладно Вам, я задал конкретный вопрос, он просто ответил по сути. На примере проще разобраться, я понимаю что awaite приостанавливает выполнение кода до выполнения потока, я просто не мог понять куда его поставить, потому что не присваивал кнопке свойсво async ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:50 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11, писать то может и проще, но если вы не понимаете, что пишите, это плохая практика. проще, не всегда лучше. Если вы не понимаете ту или иную технологию, то лучше воспользоваться той, которую вы понимаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:51 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Roman Mejtesчто это по сути только сахар для TPL серьёзно? ну это же неправда. Roman MejtesЗатем разобраться с синхронизацией в многопоточных приложениях, мониторы, симафоры, Read\Write локеры и прочие способы. стандартное уже классическое клише непонимание разницы между многопоточностью и асинхронность. приехалит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:52 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11, вы не понимаете, как работает await, всё, что могу сказать вам по этому поводу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:52 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему? если не собираетесь использовать асинхронный апи (TAP) при работе с СУБД и файлами, то да. вам поможет BackgroundWorker. можно и запускать потоки через Task.Run, но в WinForms есть уже готовые средства, которые решают это задачу и решали ещё 10 лет назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:55 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11в принципе, async\awaite проще писать да. Этого и MS хотел. Чтобы новички не пугались шарп кода))). OlegEgorov11для async\awaite необходим net framework 4.5 вроде с 2012 года. Мало? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:55 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Petro123Если получится в три минуты и просто рассказать почему фигня, то велкам. Думаю, не получится. ты просишь объяснить, почему не нужно забивать гвозди микроскопом, потому что «смотри, как лихо у меня получается». даже стараться не буду. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:56 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Roman Mejtes, Проблема в том, что я не первый день только делаю это, а vs работаю вторую неделю, но я быстро учусь ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 22:59 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
hVosttPetro123Если получится в три минуты и просто рассказать почему фигня, то велкам. Думаю, не получится. ты просишь объяснить, почему не нужно забивать гвозди микроскопом, потому что «смотри, как лихо у меня получается». даже стараться не буду. на том и расходимся) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:00 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
hVosttOlegEgorov11hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему? если не собираетесь использовать асинхронный апи (TAP) при работе с СУБД и файлами, то да. вам поможет BackgroundWorker. можно и запускать потоки через Task.Run, но в WinForms есть уже готовые средства, которые решают это задачу и решали ещё 10 лет назад. Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное? Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:03 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11, у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async connection.OpenAsync command.ExeucteReaderAsync reader.ReadAsync если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:07 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Roman MejtesOlegEgorov11, вы не понимаете, как работает await, всё, что могу сказать вам по этому поводу :) В чем моя ошибка? можете объяснить на примере? или кинуть ссылку по теме? awaite же только приостанавливает выполнение потока, чтобы у программы была возможность подождать значения которое вернет поток, для этого применяем awaite, ведь так же? на пример если в потоке проходят вычисления которые нужны для дальнейшей работы программы, используем awaite и ждем вычислений от потока, продолжаем выполнение программы с данными от потока, я прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:08 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Roman MejtesOlegEgorov11, у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async connection.OpenAsync command.ExeucteReaderAsync reader.ReadAsync если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует. просто я еще использую утилиты cmd там, не только sql ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:09 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11В чем моя ошибка? нет у тебя ошибки. OlegEgorov11так как выполняются запросы на sql servere? просто есть ещё вариант когда MyAsunc() выше есть прямо в драйвере СУБД. Тогда вы пишите: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:10 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Roman MejtesOlegEgorov11, у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async connection.OpenAsync command.ExeucteReaderAsync reader.ReadAsync если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует. и там проблема с временными таблицами, нужно чтобы они были в пределах одного коннекта, то есть там наполняется временая таблица потом с ней работает cmd ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:10 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное? Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы асинхронное. но нужно, чтобы обращения к БД и записи файлов делались через методы с суффиксом Async. вы не желаете почитать документацию? или хотя бы статейки на хабре? https://habr.com/post/139734/ https://habr.com/post/261649/ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:11 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
hVosttOlegEgorov11Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное? Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы асинхронное. но нужно, чтобы обращения к БД и записи файлов делались через методы с суффиксом Async. вы не желаете почитать документацию? или хотя бы статейки на хабре? https://habr.com/post/139734/ https://habr.com/post/261649/ спасибо за ссылки, обязательно изучу ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:12 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
hVostt, на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:14 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11, асинхронный метод может выполняться и в основном потоке. У вас есть 2 асинхронных метода, которые вы запустили в 1 STA потоке. Сперва выполнилось 20% 1 метода, затем 30% второго, затем выполнился код формы (обработка сообщений (ввода), обновление картинки (rendering), потом вернулась к первому и выполнила еще 80%, а потом вернулась ко второму и выполнила еще 70%. Таким образом в 1 потоке, выполнилось 2 метода асинхронно, при этом еще выполнялся код вашей формы, который вроде как и не зависал, но методы выполнялись. Это если очень по простому описать, как будут выполняться 2 асинхронных метода одновременно в 1 потоке. Вам будет казаться, что они оба работают, но на самом деле они работаю "по очереди", вытесняя друг друга. А если вы запустите 2 потока, то они могут выполняться одновременно (при условии наличия 2 процессоров\ядер). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:25 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
ну, а в синхронном варианте, вы запустили метод 1 и пока он не вернет управление, туда от куда был вызван, выполнение кода формы не будет, то есть обработка сообщений, рендеринг не будут выполняться. Так как будет ожидаться завершение метода. и форма зависнет ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:27 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Roman Mejtes, для новичка такое сложное объяснение не подходит. Увы. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:28 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11hVostt, на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd? Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:34 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
OlegEgorov11hVostt, на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd? Нет, не будет виснуть, так как операция будет выполнена асинхронно. Т.е. пока там БД «думает», основной поток может свободно обрабатывать UI. Отличается от Task.Run это тем, что не расходуется напрасно лишний поток и контексты переключения потоков. Т.е. так правильно. А Task.Run это костыль. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:35 |
|
Проблема с потоками
|
|||
---|---|---|---|
#18+
Petro123 Код: c# 1. 2. 3. 4.
фигню написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2018, 23:36 |
|
|
start [/forum/topic.php?fid=20&msg=39643712&tid=1399375]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 477ms |
0 / 0 |