このMSDNページには、次の例がありますFunc<T1, T2, T3>
。目的は、さまざまなオーバーロードで表すことができないAPMスタイルのタスクをラップすることです。
static Task<String> ReturnTaskFromAsyncResult()
{
IAsyncResult ar = DoSomethingAsynchronously(); // <-- If this is an APM method, it's a bad example since most APM methods have a parameter for callback and state.
Task<String> t = Task<string>.Factory.FromAsync(ar, _ =>
{
return (string)ar.AsyncState;
});
return t;
}
私の質問は関数と関係がありますDoSomethingAsynchronously();
。私が見たほとんどのAPM関数には、パラメーターのコールバックと状態が必要ですが、このサンプルにはありません。
質問: 「DoSomethingAsynchronously」のコールバックと状態のパラメーターはどうなりますか
これに似た関数を適切に呼び出すにはどうすればよいですか?私の場合、AzureTableの呼び出しを次のようにラップしようとしています
Task CreateAsync(CloudTable tbl, CancellationToken token, object state)
{
ICancellableAsyncResult result = tbl.BeginCreate(null, state); // Incorrect
token.Register((o) => result.Cancel(), state);
Task<bool> t = Task.Factory.FromAsync(result, _ =>
{
return (bool)result.AsyncState;
});
return t;
}
Task<bool> ExistsAsync(CloudTable tbl, CancellationToken token, object state)
{
ICancellableAsyncResult result = tbl.BeginExists(null, state); // Incorrect
token.Register((o) => result.Cancel(), state);
Task<bool> t = Task.Factory.FromAsync(result, _ =>
{
return (bool)result.AsyncState;
});
return t;
}