public double GetVolume() { EventHandler <GetVolumeCompletedEventArgs> callback = null; var tcs = new TaskCompletionSource <double>(); callback = (sender, args) => { RequestState state = PerformOperation(() => { tcs.SetResult(args.Result); }); if (state != RequestState.Correct) { tcs.SetResult(0); } _systemServiceCient.GetVolumeCompleted -= callback; }; _systemServiceCient.GetVolumeCompleted += callback; _systemServiceCient.GetVolumeAsync(); return(tcs.Task.Result); }