您可以使用以下方式包裹EAP進入TAP:
public static class NNNNServiceExtensions
{
public static Task<ReturnType> MethodNameTaskAsync(this NNNNService service, A a)
{
if (service == null)
throw new NullReferenceException();
var tcs = new TaskCompletionSource<ReturnType>();
EventHandlerType handler = null;
handler = (s, o) =>
{
service.MethodNameCompleted -= handler;
tcs.TrySetCompleted(o.Result);
};
service.MethodNameCompleted += handler;
try
{
service.MethodNameAsync();
}
catch
{
service.MethodNameCompleted -= handler;
throw;
}
return tcs.Task;
}
}
隨着取消可選支持,進度報告等等。有時很難指定返回類型。如果您的Completed事件使用EventArgs,則可以通過以下方式調整代碼:
public static Task MethodNameTaskAsync(this NNNNService service, A a)
{
var tcs = new TaskCompletionSource<bool>();
}
您能說明方法和事件的確切樣子嗎?你有什麼嘗試? – svick 2013-02-18 10:14:16
@svick方法和事件是Soap代理從「添加服務引用」生成的方法。我沒有嘗試過任何東西,因爲我不知道它是否可能。我見過的例子似乎使用Begin/End方法進行換行。 http://msdn.microsoft.com/en-us/library/vstudio/hh873178.aspx – 2013-02-18 10:21:48
該文章正是你所需要的。請特別參閱[任務和基於事件的異步模式(EAP)]部分(http://msdn.microsoft.com/zh-cn/library/vstudio/hh873178.aspx#EAP)。 – svick 2013-02-18 10:39:18