|
分類:[C#]
Visual Studio 2012 + .NET Framework 4.5 で C# を使用しています。
.NETのバージョンを4.5に挙げたのは最近なのでC# 5.0について勉強しつつ
業務でC#コードをいじっている者です。はじめまして。
本日思い切ってこちらの C# wizard な方々に質問させていただくのは
delegate 登録された複数の method を非同期で呼び出す方法
を探しているためです。
サンプルですが以下のようなことをしたいです。
(説明に関係ない部分は省略しています)
public class Sample
{
// 複数のclassからmethodが登録されている状態
// 登録されるmethodは互いに干渉し合わない重い処理
public Action<string> Work;
private bool SampleWork(string input)
{
// いろいろな処理を同期実行した後に
if(Work != null)
{
// 登録された method 全部を呼び出す
Work(input);
}
}
}
class A
{
void Work(string input)
{
// 重い処理の例として
Random random = new Random((int)(DateTime.Now.Ticks % Int32.MaxValue));
while(random.Next() != input.Length) { };
}
}
class B
{
void Work(string input) { /* 何か重い処理 */ }
}
class C
{
void Work(string input) { /* 何か重い処理 */ }
}
例えば上記class SampleのWorkに
class A, class B, class CのWorkが登録されていた場合
単純にWorkを呼び出すだけでは
A.Work → B.Work → C.Work (順不問)
と同期で呼び出されると思っています。
私がやりたいのは
A.Work, B.Work, C.Work を同時にキックしたい
(A.Workの処理完了を待たずにB.WorkやC.Workの処理を開始したい)
ということです。
私が担当するのはclass Sampleのみなので
class A, class B, class Cはできれば変更したくありません。
(他に手がないのであれば, いじれなくはありません)
また態々WorkerThreadを使うほどでもない気がしています.
async, awaitというキーワードの説明を読んでみたのですが
例がbutton_Clickedイベントの処理のせいか
上記でどう使えば良いのか/使えるのか判断が付きませんでした。
お手数をおかけしますが
ご助言頂きたくよろしくお願いいたします。
|