これは可能ですが、正しくするのは扱いにくく困難です。これを実現させる最善の方法は、coroutinesを使用することです。現在、コルーチンのパラダイムに適合する.NETの唯一のメカニズムは、yield return
キーワードによるC#のイテレータです。 は、あるスレッドから別のスレッドへのメソッドの実行を可能にする、理論上の何かを一緒にハックするです。しかし、これはブログにふさわしいハッキングに過ぎませんが、可能だと思います。
次善策は、Async CTPにアップグレードすることです。これはC#で利用できる機能であり、あなたが求めていることを正確に行うことができます。これは、提案されたawait
キーワードとそれに含まれるいくつかの巧妙な脆弱性でエレガントに達成されます。最終結果は、以下のようになります。
は
public async void SomeMethod()
{
// Do stuff on the calling thread.
await ThreadPool.SwitchTo(); // Switch to the ThreadPool.
// Do stuff on a ThreadPool thread now!
await MyForm.Dispatcher.SwitchTo(); // Switch to the UI thread.
// Do stuff on the UI thread now!
}
これはちょうどあなたが新しいawait
キーワードで行うことができ、多くの邪悪なクールなトリックの一つです。
対象は、特に作業項目の形で注入を受け入れるように設計されている場合は、実際には既存のスレッド上のコードの実行を注入することができる唯一の方法です。
あなたはイテレータでawait
キーワードを模倣する1つのそのような試みのために私の答えhereを見ることができます。 MindTouch Dreamフレームワークは、おそらくより良いバリエーションです。ポイントは、いくつかの巧妙なハッキングでスレッドの切り替えを引き起こすことが可能でなければならないということです。
魅力的!私は間違いなく 'await'とAsync CTPに関するさらなる研究をしなければなりません。私はかなり待っているとは思っていませんでした。 – devios1
うわー。それは滑らかです。 –