Size: a a a

2019 November 21

М

Микаил in CODE BLOG / C#
Sergey Benzenko
Тогда потоки сервера будут браться из пула. Один обрабатывает запрос до запроса к БД, потом возвращается в пул, обрабатывает другие запросы. А после возвращения результатов из БД свободный поток из пула завершает работу и выдаёт ответ клиенту.
Не очень понял..
Один обрабатывает запрос до запроса к бд...
источник

SB

Sergey Benzenko in CODE BLOG / C#
Микаил
Не очень понял..
Один обрабатывает запрос до запроса к бд...
Ну вот есть метод, которые отправляет запрос к БД. Условно
var result = await GetDBResults();

Этот поток вызывает метод и бросает работу, возвращаясь в пул. А когда GetDBResults(), любой свободный поток из пула вернётся в ту же точку метода и продолжит его до конца.
источник

A

Alexander in CODE BLOG / C#
куда скрин удалил
источник

A

Alexander in CODE BLOG / C#
источник

НП

Никита Петроченко... in CODE BLOG / C#
Ща, не красиво заскринил 😂
источник

МР

Макс Руднев... in CODE BLOG / C#
стой погоди
источник

МР

Макс Руднев... in CODE BLOG / C#
почему в пул то возвращается
источник

НП

Никита Петроченко... in CODE BLOG / C#
Alexander
куда скрин удалил
источник

SB

Sergey Benzenko in CODE BLOG / C#
Макс Руднев
почему в пул то возвращается
Если запрос к БД занимает какое-то ощутимое время и результаты ещё не готовы, то поток бросает работу, создаёт метод-продолжение и возвращается в пул
источник

SB

Sergey Benzenko in CODE BLOG / C#
Чисто теоретически, очень простой класс и очень простые методы, предположу, что код методов встраивается просто.
источник

МР

Макс Руднев... in CODE BLOG / C#
Цитата с майкрософта
Асинхронные методы используются для неблокирующих операций. Выражение await в асинхронном методе не блокирует текущий поток на время выполнения ожидаемой задачи. Вместо этого выражение регистрирует остальную часть метода как продолжение и возвращает управление вызывающему объекту асинхронного метода.
источник

МР

Макс Руднев... in CODE BLOG / C#
то есть по идее он должен не в пул уйти а продолжить выполнение кода, который его вызвал
источник

SB

Sergey Benzenko in CODE BLOG / C#
Макс Руднев
Цитата с майкрософта
Асинхронные методы используются для неблокирующих операций. Выражение await в асинхронном методе не блокирует текущий поток на время выполнения ожидаемой задачи. Вместо этого выражение регистрирует остальную часть метода как продолжение и возвращает управление вызывающему объекту асинхронного метода.
Вы про это
»возвращает управление вызывающему объекту асинхронного метода.
Это зависит от того, есть чего вызывающему методу делать или нет)))
источник

НП

Никита Петроченко... in CODE BLOG / C#
Sergey Benzenko
Чисто теоретически, очень простой класс и очень простые методы, предположу, что код методов встраивается просто.
надо бы потестить еще такую щичь. Но вчера выяснили с тимЛидом, что вызов виртуального метода штука дорогая )
Дороже чем анбокс
источник

М

Микаил in CODE BLOG / C#
Ага..
Это await так действует, да?
Вот смотри сейчас
Клиент
... 
Async GetAccount()
{
Await Servise.GetAccount(id);
}



Сервер Wcf:

... 
Account GetAccount()
{
//подключение к базе данных
Connection.open;
//запрос без async и await

return account
}


Сервер нормально отреагирует если к нему будут допустим постоянно подключаться.
источник

МР

Макс Руднев... in CODE BLOG / C#
ну ток асинхронный метод должен вернуть чтото типо Task<YourObject>
источник

SB

Sergey Benzenko in CODE BLOG / C#
Микаил
Ага..
Это await так действует, да?
Вот смотри сейчас
Клиент
... 
Async GetAccount()
{
Await Servise.GetAccount(id);
}



Сервер Wcf:

... 
Account GetAccount()
{
//подключение к базе данных
Connection.open;
//запрос без async и await

return account
}


Сервер нормально отреагирует если к нему будут допустим постоянно подключаться.
Тут, думаю, лучше будет сделать асинхронным Service.GetAccount и await поставить на самом запросе к БД.
Хотя, если запрос простой (выбор одной записи из таблицы), то особо смысла не будет, мне кажется.
источник

М

Микаил in CODE BLOG / C#
Sergey Benzenko
Тут, думаю, лучше будет сделать асинхронным Service.GetAccount и await поставить на самом запросе к БД.
Хотя, если запрос простой (выбор одной записи из таблицы), то особо смысла не будет, мне кажется.
Клиент:
Async GetAccount() 
{
Await Servise.GetAccount(id);
}

Сервер:

Account async GetAccount()
{
//подключение к базе данных
Connection.open;
await //запрос

return account
}


Так?
источник

SB

Sergey Benzenko in CODE BLOG / C#
Микаил
Клиент:
Async GetAccount() 
{
Await Servise.GetAccount(id);
}

Сервер:

Account async GetAccount()
{
//подключение к базе данных
Connection.open;
await //запрос

return account
}


Так?
Не, пардон, я чот реально перемудрил. До этого почти правильно было. Только метод должен возвращать Task<Account>
Клиент:
Async GetAccount() 
{
var account = await Servise.GetAccount(id);
}

Сервер:

Task<Account> GetAccount()
{
//подключение к базе данных
Connection.open;
//запрос

return Task<Account>;
}
источник

М

Микаил in CODE BLOG / C#
Я еще такое не видел ни разу, чтобы задачу возвращали.. Надо узнать об этом, интересно
источник