2016-10-06 3 views
-1

aysnc/awaitを使用しようとしていて、過去のステップ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について知っておく必要があります。その時点で、あなたの仕事が終了すると、ページはおそらく既に処理されており、応答はすでにクライアントに返されています。したがって、コードが実行されたとしても、その時点では意味をなさない。

関連する問題