async Task <HttpResponse> HandleNewXaml(HttpRequest request) { JsonHttpResponse response = new JsonHttpResponse(); StreamReader sr = new StreamReader(request.Body, Encoding.UTF8); string json = await sr.ReadToEndAsync(); EvalRequest evalRequest = Serializer.DeserializeJson <EvalRequest>(json); EvalResponse evalResponse = new EvalResponse(); response.Data = evalResponse; EvalResult result = null; try { result = await vm.Eval(evalRequest, mainScheduler, CancellationToken.None); evalResponse.Messages = result.Messages; evalResponse.Duration = result.Duration; Log.Information($"Visualizing result {result.Result}"); if (result.HasResult) { var tcs = new TaskCompletionSource <bool>(); Xamarin.Forms.Device.BeginInvokeOnMainThread(async() => { try { await previewer.Preview(result); tcs.SetResult(true); } catch (Exception ex) { await previewer.NotifyError(new ErrorViewModel("Oh no! An exception!", ex)); tcs.SetException(ex); } }); await tcs.Task; } else { Xamarin.Forms.Device.BeginInvokeOnMainThread(async() => { await previewer.NotifyError(new ErrorViewModel("Oh no! An evaluation error!", result)); }); } return(response); } catch (Exception ex) { Log.Exception(ex); response.StatusCode = HttpStatusCode.InternalServerError; return(response); } }
async Task HandleEvalRequest(EvalRequest request) { EvalResponse evalResponse = new EvalResponse(); EvalResult result; try { result = await vm.Eval(request, mainScheduler, CancellationToken.None); if (result.HasResult) { var tcs = new TaskCompletionSource <bool>(); Xamarin.Forms.Device.BeginInvokeOnMainThread(async() => { try { await previewer.Preview(result); tcs.SetResult(true); } catch (Exception ex) { errorViewModel.SetError("Oh no! An exception!", ex); await previewer.NotifyError(errorViewModel); tcs.SetException(ex); } }); await tcs.Task; } else { Xamarin.Forms.Device.BeginInvokeOnMainThread(async() => { errorViewModel.SetError("Oh no! An evaluation error!", result); await previewer.NotifyError(errorViewModel); }); } } catch (Exception ex) { Log.Exception(ex); } }
async Task HandleEvalRequest(EvalRequestMessage request) { EvalResponse evalResponse = new EvalResponse(); EvalResult result; try { result = await vm.Eval(request, mainScheduler, CancellationToken.None); if (result.HasResult || result.ResultType != null) { await uiToolkit.RunInUIThreadAsync(async() => { try { await previewer.Preview(result); } catch (Exception ex) { errorViewModel.SetError("Oh no! An exception!", ex); await previewer.NotifyError(errorViewModel); } }); } else { await uiToolkit.RunInUIThreadAsync(async() => { errorViewModel.SetError("Oh no! An evaluation error!", result); await previewer.NotifyError(errorViewModel); }); } } catch (Exception ex) { Log.Exception(ex); } }