Сообщение Re[12]: [.NET][async][WinForms] от 24.12.2016 19:39
Изменено 25.12.2016 17:43 Serginio1
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>> Так я тебе в твоем примере и привел, когда при вызове RunAsync внутри ты будешь не будешь использовать ConfigureAwait(false)
S>>Просто ты не читаешь.
S>Скорее наоборот Цитато:
S>
Еще раз. Я в 1С использую Контекст Синхронизации для получения ком событий в потоке GUI 1c.
S>
S>Ну как, помог ConfigureAwait(false)?
Вот такого выделенного я в 1С не могу сделать, а в вот вместо выделенного в библиотеке
легко
S>Надеюсь, теперь понятно, про что уже четыре человека в топике пытаются тебе намекнуть: не надо лечить симптомы, не разобравшись с болезнью.
Я уже 1000+1 раз объяснил свою проблему в 1С. Но Вы не слушаете. Огромное спасибо за ConfigureAwait.Fody
Еще раз не везде можно использовать await, но можно использовать WindowsFormsSynchronizationContext и для получения результата использовать методы синхронизации.
Мне это нужно, а вам нет. Но это не значит, что проблемы не существует.
Еще раз дам ссылочки
.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
А вот при использовании напрbмер HTTPClient можно использовать синхронные методы потому, что в библиотеке все методы .ConfigureAwait(false);
Но вот могут попасться и библиотек ConfigureAwait по умолчанию.
Использовать асинхронные методы можно, но это не всегда удобно.
Асинхронное программирование в 1С через использование классов .Net из Native ВК
Поэтому, если у Вас не болит, то это не значит, что не болит у всех
Да и в GUI далеко не всегда нужно переключаться на поток GUI. Раньше до await использовали Invoke
И это было нормально. А вот ConfigureAwait(true) это уже извращение.
Еще раз огромное спасибо за ConfigureAwait.Fody. Это решение всех моих проблем.
Но к сожалению, не решает проблем со сторонними библиотеками где не используют .ConfigureAwait(false);
S>Здравствуйте, Serginio1, Вы писали:
S>> Так я тебе в твоем примере и привел, когда при вызове RunAsync внутри ты будешь не будешь использовать ConfigureAwait(false)
S>>Просто ты не читаешь.
S>Скорее наоборот Цитато:
S>
S>Код await RunAsync().Wait(); именно это и делает — блокирует все доступные потоки (их одна штука). Вот тебе другой пример того же поведения:S>проблема там не в ConfigureAwait(), а в исчерпании потоков, доступных для запуска продолжений
Еще раз. Я в 1С использую Контекст Синхронизации для получения ком событий в потоке GUI 1c.
S>
S>using System;
S>using System.Threading;
S>using System.Threading.Tasks;
S>namespace ConsoleApp3
S>{
S> class Program
S> {
S> static void Main(string[] args)
S> {
S> ThreadPool.SetMinThreads(1, 1);
S> ThreadPool.SetMaxThreads(8, 8);
S> // ...
S> RunAsync(10).Wait();
S> Console.WriteLine(total);
S> }
S> private static volatile int total = 0;
S> private static async Task RunAsync(int i)
S> {
S> if (i == 0)
S> return;
S> Console.WriteLine(i);
S> await Task.Delay(1).ConfigureAwait(false);
S> RunAsync(i - 1).Wait();
S> Interlocked.Increment(ref total);
S> }
S> }
S>}
S>
S>Ну как, помог ConfigureAwait(false)?
Вот такого выделенного я в 1С не могу сделать, а в вот вместо выделенного в библиотеке
await RunAsync(i - 1).Wait;
легко
S>Надеюсь, теперь понятно, про что уже четыре человека в топике пытаются тебе намекнуть: не надо лечить симптомы, не разобравшись с болезнью.
Я уже 1000+1 раз объяснил свою проблему в 1С. Но Вы не слушаете. Огромное спасибо за ConfigureAwait.Fody
Еще раз не везде можно использовать await, но можно использовать WindowsFormsSynchronizationContext и для получения результата использовать методы синхронизации.
Мне это нужно, а вам нет. Но это не значит, что проблемы не существует.
Еще раз дам ссылочки
.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
А вот при использовании напрbмер HTTPClient можно использовать синхронные методы потому, что в библиотеке все методы .ConfigureAwait(false);
Но вот могут попасться и библиотек ConfigureAwait по умолчанию.
Использовать асинхронные методы можно, но это не всегда удобно.
Асинхронное программирование в 1С через использование классов .Net из Native ВК
Поэтому, если у Вас не болит, то это не значит, что не болит у всех
Да и в GUI далеко не всегда нужно переключаться на поток GUI. Раньше до await использовали Invoke
delegate void AddTextToTListBox(string text);
void msg_OnSendChatMessage(string message)
{
if (listBox1.InvokeRequired)
{
AddTextToTextBox d = new AddTextToTextBox(msg_OnSendChatMessage);
this.Invoke(d, new object[] { message });
}
else
{
listBox1.Text += message + "\r\n";
}
}
И это было нормально. А вот ConfigureAwait(true) это уже извращение.
Еще раз огромное спасибо за ConfigureAwait.Fody. Это решение всех моих проблем.
Но к сожалению, не решает проблем со сторонними библиотеками где не используют .ConfigureAwait(false);
Re[12]: [.NET][async][WinForms]
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>> Так я тебе в твоем примере и привел, когда при вызове RunAsync внутри ты будешь не будешь использовать ConfigureAwait(false)
S>>Просто ты не читаешь.
S>Скорее наоборот Цитато:
S>
Еще раз. Я в 1С использую Контекст Синхронизации для получения ком событий в потоке GUI 1c.
S>
S>Ну как, помог ConfigureAwait(false)?
Вот такого выделенного я в 1С не могу сделать, а в вот вместо выделенного в библиотеке
await RunAsync(i — 1) легко
S>Надеюсь, теперь понятно, про что уже четыре человека в топике пытаются тебе намекнуть: не надо лечить симптомы, не разобравшись с болезнью.
Я уже 1000+1 раз объяснил свою проблему в 1С. Но Вы не слушаете. Огромное спасибо за ConfigureAwait.Fody
Еще раз не везде можно использовать await, но можно использовать WindowsFormsSynchronizationContext и для получения результата использовать методы синхронизации.
Мне это нужно, а вам нет. Но это не значит, что проблемы не существует.
Еще раз дам ссылочки
.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
А вот при использовании напрbмер HTTPClient можно использовать синхронные методы потому, что в библиотеке все методы .ConfigureAwait(false);
Но вот могут попасться и библиотек ConfigureAwait по умолчанию.
Использовать асинхронные методы можно, но это не всегда удобно.
Асинхронное программирование в 1С через использование классов .Net из Native ВК
Поэтому, если у Вас не болит, то это не значит, что не болит у всех
Да и в GUI далеко не всегда нужно переключаться на поток GUI. Раньше до await использовали Invoke
И это было нормально. А вот ConfigureAwait(true) это уже извращение.
Еще раз огромное спасибо за ConfigureAwait.Fody. Это решение всех моих проблем.
Но к сожалению, не решает проблем со сторонними библиотеками где не используют .ConfigureAwait(false);
S>Здравствуйте, Serginio1, Вы писали:
S>> Так я тебе в твоем примере и привел, когда при вызове RunAsync внутри ты будешь не будешь использовать ConfigureAwait(false)
S>>Просто ты не читаешь.
S>Скорее наоборот Цитато:
S>
S>Код await RunAsync().Wait(); именно это и делает — блокирует все доступные потоки (их одна штука). Вот тебе другой пример того же поведения:S>проблема там не в ConfigureAwait(), а в исчерпании потоков, доступных для запуска продолжений
Еще раз. Я в 1С использую Контекст Синхронизации для получения ком событий в потоке GUI 1c.
S>
S>using System;
S>using System.Threading;
S>using System.Threading.Tasks;
S>namespace ConsoleApp3
S>{
S> class Program
S> {
S> static void Main(string[] args)
S> {
S> ThreadPool.SetMinThreads(1, 1);
S> ThreadPool.SetMaxThreads(8, 8);
S> // ...
S> RunAsync(10).Wait();
S> Console.WriteLine(total);
S> }
S> private static volatile int total = 0;
S> private static async Task RunAsync(int i)
S> {
S> if (i == 0)
S> return;
S> Console.WriteLine(i);
S> await Task.Delay(1).ConfigureAwait(false);
S> RunAsync(i - 1).Wait();
S> Interlocked.Increment(ref total);
S> }
S> }
S>}
S>
S>Ну как, помог ConfigureAwait(false)?
Вот такого выделенного я в 1С не могу сделать, а в вот вместо выделенного в библиотеке
await RunAsync(i - 1).Wait;
await RunAsync(i — 1) легко
S>Надеюсь, теперь понятно, про что уже четыре человека в топике пытаются тебе намекнуть: не надо лечить симптомы, не разобравшись с болезнью.
Я уже 1000+1 раз объяснил свою проблему в 1С. Но Вы не слушаете. Огромное спасибо за ConfigureAwait.Fody
Еще раз не везде можно использовать await, но можно использовать WindowsFormsSynchronizationContext и для получения результата использовать методы синхронизации.
Мне это нужно, а вам нет. Но это не значит, что проблемы не существует.
Еще раз дам ссылочки
.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
А вот при использовании напрbмер HTTPClient можно использовать синхронные методы потому, что в библиотеке все методы .ConfigureAwait(false);
Но вот могут попасться и библиотек ConfigureAwait по умолчанию.
Использовать асинхронные методы можно, но это не всегда удобно.
Асинхронное программирование в 1С через использование классов .Net из Native ВК
Поэтому, если у Вас не болит, то это не значит, что не болит у всех
Да и в GUI далеко не всегда нужно переключаться на поток GUI. Раньше до await использовали Invoke
delegate void AddTextToTListBox(string text);
void msg_OnSendChatMessage(string message)
{
if (listBox1.InvokeRequired)
{
AddTextToTextBox d = new AddTextToTextBox(msg_OnSendChatMessage);
this.Invoke(d, new object[] { message });
}
else
{
listBox1.Text += message + "\r\n";
}
}
И это было нормально. А вот ConfigureAwait(true) это уже извращение.
Еще раз огромное спасибо за ConfigureAwait.Fody. Это решение всех моих проблем.
Но к сожалению, не решает проблем со сторонними библиотеками где не используют .ConfigureAwait(false);