2

スレッド内で参照変数を設定する際に問題が発生しました。

エラー:
「匿名メソッド、ラムダ式、またはクエリ式内でrefまたはoutパラメータ「output」を使用できません」

これを機能させる、または同様の効果を達成する方法はありますか?

public static void LoadThreaded<T>(string path, ref T output)
{
    ThreadStart threadStart = delegate
    {
        output = Loader<T>(path);
    };

    new Thread(threadStart).Start();
}
4

1 に答える 1

3

問題は、が別のスレッドによって設定されているため、output変数が設定される前に(必然的に)メソッドが戻ることです。output

ここでの最良のオプションは、TPLを使用してこれをやり直すことです。

Task<T> LoadThreaded<T>(string path)
{
    return Task.Factory.StartNew( () => Loader<T>(path) );
}

これにより、この非同期操作を開始し、ブロック(呼び出し)またはタスク継続の追加のいずれかによって、完了時に結果を取得できます。output.Result

于 2012-08-03T20:38:56.760 に答える