2016-04-18 12 views
2

このような何かを行うことが可能です。それは同じような非同期とスレッドを選択してキーワードを待っている何かをすることは可能ですか、それはスウィッチになりますか?これと同じように:変更の実行スレッドがタスクを

public void SomeMethod() 
{ 
    // [A] Here I am in the caller thread 

    ChangeThread(); 

    // [B] Here I am in some other thread 
} 

private void ChangeThread() 
{ 
    Thread thread = new Thread(???); 
    // ??? 
} 

私はこれが代表者で可能である知っているが、方法が終了したときに、おそらく戻って、現在のスレッドを変更すると、メソッドの内部でスレッドを切り替えることができるのか?そうでない場合は、スレッドを変更できるasync/awaitを使用して何かを作成することは可能ですか?(スレッドはControl.Invokeを使用しているUIスレッドのように)どのスレッドに切り替えるのですか?私はいつも、私は実行コンテキストを変更し、元のコンテキストに行く必要がある場合に何

+0

あなたは何をしようとしていますか*なぜ*ですか?なぜあなたは "スレッドを変更する"(そのようなことはない)のですか?問題が発生しましたか?スレッドを変更することが解決策だと思いますか? 「どのスレッド」は何を意味しますか?スレッドプールを使用しないでください。単純に 'Task.Run'を使用してください。 –

+0

@PanagiotisKanavosそれは純粋な好奇心によって尋ねられ、実際の人生の問題を表すものではありません。 –

答えて

0

は次のとおりです。

public async void RunWorkerAsync() 
    { 
     var result = await RetriveDataAsync(); 
    } 


public Task<Object<TItem>> RetriveResultsAsync() 
    { 
     var tokenSource = new CancellationTokenSource(); 
     var ct = tokenSource.Token; 


     var source = new TaskCompletionSource<Object<TItem>>(); 

     var task = Task.Run(() => 
     { 
      // [B] Here I am in some other thread 
      while (!ConditionToStop) 
      { 
       if (ct.IsCancellationRequested) 
       { 
        tokenSource.Cancel(); 
        ct.ThrowIfCancellationRequested(); 
       } 
      } 
     }, ct).ContinueWith(taskCont => 
     { 

      if (resultedData != null) 
      { 
       source.SetResult(resultedData); 
      } 
     }, ct); 


     bool taskCompleted = task.Wait(2000, ct); 
     if (!taskCompleted) 
     { 
      tokenSource.Cancel(); 
     } 

     return source.Task; 
    } 

あなたは結果なしで一つのタスク内のすべてを実行したい場合は、単にデータを渡しますtaskCompletedパーツを削除して、停止する条件でのみ使用してください。あなたのコードは別のスレッドで実行され、inが完了すると実行はあなたの呼び出しスレッドに戻ります。返品のない単純なものが必要な場合は、その方法の中で使用するだけです。

Task.Run(Action() => ExecuteSomething); 

この方法では、

+0

これは本当に私の質問に対する答えではありません。他のスレッド(Task.Run)でデリゲートを呼び出すだけで、さらに悪いことに、スレッドを選択できません。実行されます。代わりに、スレッドプールスレッド上で実行されます。 –

関連する問題