async\await и подсказки от ide, плагины
От: Sharov Россия  
Дата: 21.01.20 09:30
Оценка:
Здравствуйте.

По мотивам предыдущего поста, дан сл. код:

private static async void Test()
{
            var tcs = new TaskCompletionSource<int>();
            var task = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(1000);
                tcs.SetResult(10);
         //continuation thread starts here
                Console.WriteLine("here3");
            });

            await tcs.Task; 
            //continuation code
        task.Wait(); 
            

            Console.WriteLine("here1");
}


Есть ли какие-нибудь студийные плагины или для R#, которые все бы это могли как-то отметить\выделить. Т.е. после выполнения кода Х стартует выполнение кода Y.
Или это крайне нетривиальная задача?
Кодом людям нужно помогать!
Re: async\await и подсказки от ide, плагины
От: Jericho113 Украина  
Дата: 21.01.20 12:00
Оценка: 81 (3)
Здравствуйте, Sharov, Вы писали:
S>
S>private static async void Test()
S>{
S>            var tcs = new TaskCompletionSource<int>();
S>}
S>


S>Есть ли какие-нибудь студийные плагины или для R#, которые все бы это могли как-то отметить\выделить. Т.е. после выполнения кода Х стартует выполнение кода Y.

S>Или это крайне нетривиальная задача?

Основываясь на выводах статьи The danger of TaskCompletionSource class
Нужна простая проверка что все
TaskCompletionSource
создаются с флагом
TaskCreationOptions.RunContinuationsAsynchronously

Я к сожалению не знаю такого плагина для R# или других аддонов для студии которые делают такую подсказку.

Да и еще один момент — вам действительно нужно объявлять тестовый метод как
async void
?
Я очень настороженно отношусь к такому объявлению с тех пор как получил в продакшене руины сервиса по необработанному исключению которое благополучно
миновало все try/catch и ,если это не обработчик асинхронного события, вместо
async void
пишу
async Task
.
Согласен что не очень привычно объявлять возвращаемый тип который явно не возвращается из метода но все же лучше так чем необработанное исключение.
NetDigitally yours ....
Re[2]: async\await и подсказки от ide, плагины
От: Sharov Россия  
Дата: 21.01.20 12:07
Оценка:
Здравствуйте, Jericho113, Вы писали:


J>Основываясь на выводах статьи The danger of TaskCompletionSource class

J>Нужна простая проверка что все
J>
TaskCompletionSource
создаются с флагом
TaskCreationOptions.RunContinuationsAsynchronously

J>Я к сожалению не знаю такого плагина для R# или других аддонов для студии которые делают такую подсказку.

Нужна подсвтека или что-то в этом роде, которое бы к таску показывало его продолжение. Т.е. в примере выше SetResult() и task.Wait() должны быть как-то скоррелированы.

J>Да и еще один момент — вам действительно нужно объявлять тестовый метод как
async void
?

J>Я очень настороженно отношусь к такому объявлению с тех пор как получил в продакшене руины сервиса по необработанному исключению которое благополучно
J>миновало все try/catch и ,если это не обработчик асинхронного события, вместо
async void
пишу
async Task
.

J>Согласен что не очень привычно объявлять возвращаемый тип который явно не возвращается из метода но все же лучше так чем необработанное исключение.

Про это я в курсе, это для примера.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.