サービス クライアントによって呼び出される WCF サービスがあります。async / await コンストラクトを使用して、これへの呼び出しをラップしたいと思います。ただし、サービスとサービス クライアントは .NET3.5 です。これに対する私の解決策は次のとおりです。
private async Task<ObservableCollection<MyEntity>> LoadData(ParamData param)
{
ServiceClient svc = new ServiceClient();
int results = 0;
// Set-up parameters
myParams = BuildParams(param);
// Call a count function to see how much data we're talking about
// This call should be relatively quick
var counter = Task.Factory.StartNew(() =>
{
results = svc.GetResultCount(myParams);
}).ContinueWith((task) =>
{
if (results <= 10000 ||
(MessageBox.Show("More than 10000 results, still retrieve data?"), MessageBoxButton.YesNo) == MessageBoxResult .Yes))
{
return svc.Search(myParams);
}
});
}
コンパイルエラーが発生します:
Since 'System.Action<System.Threading.Tasks.Task>' returns void, a return keyword must not be followed by an object expression
それで、私の質問は、この方法で同期メソッドを実行することは可能ですか?もしそうなら、私は何を間違っていますか? 私の目的は、メソッドを次のように呼び出すことができることです。
var data = await LoadData(params);