Я, должно быть, что-то упускаю,

var t2 = new Task<bool>(() =>
         {
             return UserName == "Admin";
         });

bool x = await t2;

bool x = await t2; никогда не завершается, x ничего не получает (хотя я убедился, что UserName равно "Admin"), не знаю точно, что происходит, пожалуйста, кто-нибудь может объяснить меня .

0
AymenDaoudi 9 Окт 2014 в 15:36

2 ответа

Лучший ответ

Вы не приступили к задаче. await будет ждать завершения, но никогда не завершится, если не начнется.

Возможно, вам нужен Task.Run, который создает и начинает задачу? (Я предполагаю, что на самом деле ваша задача делает что-то более полезное ...)

7
Jon Skeet 9 Окт 2014 в 15:38
Даже t2.start() поможет запустить задачу, а затем ожидает завершения
 – 
Mrinal Kamboj
9 Окт 2014 в 15:40
2
@MrinalKamboj: Действительно, но если вы собираетесь создать, а затем сразу же запустить задачу, вы также можете использовать Task.Run в первую очередь :)
 – 
Jon Skeet
9 Окт 2014 в 15:40
2
@ Джон Скит согласился, пытался внести минимальное текущее изменение кода :)
 – 
Mrinal Kamboj
9 Окт 2014 в 15:43
Правильный способ создать и запустить задачу — использовать Task.Run blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468.aspx
 – 
Paulo Morgado
9 Окт 2014 в 20:01

Нужно запускать задачу, но лучше использовать фабрику задач

Task.Factory.StartNew(() =>
        {
            return UserName == "Admin";
        });

bool x = await t2;

Или используйте Task.Run ()

Task.Run против Factory.StartNew

0
dariogriffo 9 Окт 2014 в 15:43