Для метода async
, который возвращает Task<bool>
, мне нужно выполнить некоторые действия после его завершения. Метод asyn c выглядит следующим образом:
async Task<bool> EntryExists(string entry)
{
return await Task.Run(() => call_that_returns_bool());
}
Я вызываю его и прикрепляю к нему задачу продолжения для выполнения последующих действий:
EntryExists(my_entry).ContinueWith(t =>
{
if(t.Result) ...
});
Однако теперь мне нужно условно дождаться завершения связанной задачи. Значит, в зависимости от параметра, мне нужно либо немедленно вернуться к вызывающей стороне, либо подождать, пока задачи не закончатся sh. Я изменяю приведенный выше код, чтобы он выглядел следующим образом:
var T = EntryExists(my_entry).ContinueWith(t =>
{
if(t.Result) ...
});
if(wait) T.Wait(); //wait is my parameter
При выполнении этого код навсегда застревает в T.Wait (), когда параметр wait
равен true
, как если бы T никогда не срабатывал. Затем я попробовал следующее:
var T = EntryExists(my_entry).ContinueWith(t =>
{
if(t.Result) ...
});
T.Start();
if(wait) T.Wait();
После чего он говорит мне, что
Запуск не может быть вызван для задачи продолжения
Я знаю, что мне чего-то не хватает по основам c, но после кодирования в течение последних 15 часов мой мозг мало помогает. Может кто-нибудь указать, что мне нужно делать?