0

Func<t>BeginInvoke を使用して呼び出された a からどのように値を取得しますか?

例えば:

private void MyTest()
{
    Func<string> foo = Bar;

    foo.BeginInvoke(BarComplete, null);
}

private string Bar()
{
    return "Success";
}

private void BarComplete(IAsyncResult ar)
{
    var result = (string) ar.AsyncState;

    Console.WriteLine(result); // Should print "Success"
}

これを AsyncCallback にキャストしてから呼び出す必要がありますEndInvokeか?

とにかく、フィードバックをありがとう。

4

1 に答える 1

3

AsyncState渡したものを 2 番目のパラメーターとして保持するため、代わりにオブジェクトをnull渡す必要があります。foo結果を取得するにはEndInvoke、foo オブジェクトから呼び出す必要があり、結果のオブジェクト バージョンが返されます。

private void MyTest()
{
    Func<string> foo = Bar;

    foo.BeginInvoke(BarComplete, foo);
}

private string Bar()
{
    return "Success";
}

private void BarComplete(IAsyncResult ar)
{
    var foo = (Func<string>)ar.AsyncState;
    var uncastResult = foo.EndInvoke(ar); //This returns a "object", but it would still work with WriteLine
    var castResult = (string)uncastResult;

    Console.WriteLine(uncastResult); // Should print "Success"
    Console.WriteLine(castResult); // Should also print "Success"
}
于 2013-08-15T19:48:24.187 に答える