2

複数のタスクを生成する wcf サービスがあります。各タスクが情報を親スレッドに返す方法を探しています (そして最終的にはデータ コントラクトを介してクライアントに)

行う作業は別のクラスです。メインクラスでは、次のようにタスクを開始しています。

        CancellationTokenSource tokenSource = new CancellationTokenSource();
        CancellationToken token = tokenSource.Token;
        Task[] arrTask = new Task[lstTasks.Count];
        int i = 0;

        foreach(LabParser classA in lstTasks)
            {
                try
                {
                   var t = Task.Factory.StartNew(clsa.ProcessLabs,token);
                    arrTask[i] = t;
                    i++;
                }
                catch (Exception e)
                {
                    string tmp = e.ToString();
                }
            }
            Task.WaitAll(arrTask);

そのため、classA.ProcessLabs ではかなりの作業を行っています。この親に、スレッドの現在のステータスに関する情報をメッセージで送り返すことができるようにしたいと考えています。私は、デリゲートとイベントを使用してイベントを発生させるvbでこれを行うことに慣れています。C# でこれを行う同等の方法が見つからないようです。

4

3 に答える 3

2

ステータス/進行状況を報告する標準的な手段は、IProgress<T>インターフェース経由であり、多くの場合、デフォルトのProgress<T>実装経由です。

私は、デリゲートとイベントを使用してイベントを発生させるvbでこれを行うことに慣れています。C#でこれを行う同等の方法が見つからないようです。

同じ手法が C# でも機能するはずです。C# は、VB.Net と同じ基本機能セットを持つデリゲートとイベントをサポートしているため、必要に応じてこのコードを直接移植できるはずです。

于 2013-10-07T17:39:41.017 に答える
0

を使用する必要がありますTask<T>。これにより、コールバックが値を返すことができます。

于 2013-10-07T17:39:34.753 に答える
0

デリゲートとイベントの使用は C# で機能しますが、構文は V​​B とは異なります。

デリゲートの定義

/// <summary>
/// Update count delegate handler
/// </summary>
/// <param name="sender">Obect sender</param>
/// <param name="ca">Event arguments</param>
public delegate void UpdateCountHandler(object sender, TaskArgs ca);

/// <summary>
/// Update count event
/// </summary>
public event UpdateCountHandler UpdateCount;

イベントを呼び出す。

// Call on the event
 this.UpdateCount(this, tsk);
于 2013-10-07T17:47:49.223 に答える