2016-10-06 2 views
-1

Я пытаюсь использовать aysnc/wait, и у меня возникли проблемы с получением шага 1. Когда я запускаю следующий код, я ожидаю, что «myMethod» будет вызываться с переданным «Bob» и то на странице будет отображаться «Hello Bob». Ничего не происходит, когда я запускаю его. Я отлаживал его, и «myMethod» не вызывался.Действие, которое не выполняется в задаче

Что мне не хватает?

protected void Page_Load(object sender, EventArgs e) 
    { 
     Task.Factory.StartNew(() => myMethod("Bob")).ContinueWith(t => Label1.Text = t.Result, TaskScheduler.FromCurrentSynchronizationContext());                
    }   

    public string myMethod(string name) 
    { 
     Thread.Sleep(2000); 
     return "Hello " + name; 
    } 
+3

ASP.Net не работает так; ваш ответ уже подан. Вы хотите запустить клиент. – SLaks

+2

Кроме того, вы должны быть осторожны, чтобы [никогда не использовать 'Task.Factory.StartNew', не переходя в планировщик задач] (http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html), вы может легко случайно запустить код в планировщике, которого вы не намеревались. Вместо этого вы должны просто использовать 'Task.Run' (Не то, что использование' Task.Run' решит вашу проблему) –

ответ

1

Кажется, что вы работаете с asp.net. Если это так, вы должны знать о Page lifecycle. В то время, когда ваша задача будет завершена, страница, вероятно, уже обработана, и ответ уже возвращен клиенту. Поэтому, даже если ваш код будет выполнен, в данный момент это не имеет никакого смысла.

Смежные вопросы