Здравствуйте.
По мотивам предыдущего поста, дан сл. код:
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.
Или это крайне нетривиальная задача?
Здравствуйте, 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
.
Согласен что не очень привычно объявлять возвращаемый тип который явно не возвращается из метода но все же лучше так чем необработанное исключение.
Здравствуйте, 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>Согласен что не очень привычно объявлять возвращаемый тип который явно не возвращается из метода но все же лучше так чем необработанное исключение.
Про это я в курсе, это для примера.