Synchronous Query
.Get(Request, CancellationToken, IDictionary<string, object>) returns possible value. Null, if no handler produced a request.
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type? type = service.Get<TypeRequest, Type>(request);
.TryGet(Request, out Response, CancellationToken, IDictionary<string, object>) returns true if value was completed.
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
if (service.TryGet(request, out Type? type)) WriteLine(type);
.GetRequired(Request, CancellationToken, IDictionary<string, object>) is used when Completed result is expected.
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type type = service.GetRequired<TypeRequest, Type>(request);
.Invoke(Request, CancellationToken, IDictionary<string, object>) calls a service without expecting a response value.
// Handler
Action<IQuery<WakeUpRequest, Avalanche.Void>> wakeupHandler = q => { Console.WriteLine("Wake Up!"); q.Response.SetCompleted(); };
// Create service
IService service = Services.Create(wakeupHandler);
// Create request
WakeUpRequest request = new WakeUpRequest();
// Issue request
service.Invoke(request);
struct WakeUpRequest { }
.TryInvoke(Request, CancellationToken, IDictionary<string, object>) tries to a service that might not me handled.
// Handler
Action<IQuery<WakeUpRequest, Avalanche.Void>> wakeupHandler = q => { Console.WriteLine("Wake Up!"); q.Response.SetCompleted(); };
// Create service
IService service = Services.Create(wakeupHandler);
// Create request
WakeUpRequest request = new WakeUpRequest();
// Invoke
bool ok = service.TryInvoke(request);
Asynchronous Query
.GetAsync(Request, CancellationToken, IDictionary<string, object>) and GetAsyncQuickAbort() executes query asynchronously.
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type? type = await service.GetAsync<IRequest, Type>(request);
.GetRequiredAsync(Request, CancellationToken, IDictionary<string, object>) and GetRequiredAsyncQuickAbort() executes query asynchronously and expects a result.
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type type = await service.GetRequiredAsync<IRequest, Type>(request);
.InvokeAsync(Request, CancellationToken, IDictionary<string, object>) and InvokeAsyncQuickAbort() calls a service without expecting a response value.
// Handler
Action<IQuery<WakeUpRequest, Avalanche.Void>> wakeupHandler = q => { Console.WriteLine("Wake Up!"); q.Response.SetCompleted(); };
// Create service
IService service = Services.Create(wakeupHandler);
// Create request
WakeUpRequest request = new WakeUpRequest();
// Invoke async
await service.InvokeAsync(request);
struct WakeUpRequest { }
Error Handling
If no handler produced a value and result was Required, then ServiceException is thrown with ServiceMessages.Instance.BadQueryNoValue error code.
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.NotFound");
// Issue request
try
{
Type type = service.GetRequired<IRequest, Type>(request);
}
catch (Exception e) when (e.HResult == Services.MessageDescription.BadQueryNoValue.Code)
{
WriteLine("No result, type not found.");
}
See ServiceMessages for other error messages.
Full Example
Full example
using System;
using System.Threading.Tasks;
using Avalanche.Service;
using static System.Console;
public class service_query
{
public async static Task Run()
{
{
// <01>
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type? type = service.Get<TypeRequest, Type>(request);
// </01>
}
{
// <02>
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
if (service.TryGet(request, out Type? type)) WriteLine(type);
// </02>
}
{
// <03>
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type type = service.GetRequired<TypeRequest, Type>(request);
// </03>
}
{
// <04>
// Handler
Action<IQuery<WakeUpRequest, Avalanche.Void>> wakeupHandler = q => { Console.WriteLine("Wake Up!"); q.Response.SetCompleted(); };
// Create service
IService service = Services.Create(wakeupHandler);
// Create request
WakeUpRequest request = new WakeUpRequest();
// Issue request
service.Invoke(request);
// </04>
}
{
// <05>
// Handler
Action<IQuery<WakeUpRequest, Avalanche.Void>> wakeupHandler = q => { Console.WriteLine("Wake Up!"); q.Response.SetCompleted(); };
// Create service
IService service = Services.Create(wakeupHandler);
// Create request
WakeUpRequest request = new WakeUpRequest();
// Invoke
bool ok = service.TryInvoke(request);
// </05>
}
{
// <11>
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type? type = await service.GetAsync<IRequest, Type>(request);
// </11>
}
{
// <12>
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.String");
// Issue request
Type type = await service.GetRequiredAsync<IRequest, Type>(request);
// </12>
}
{
// <13>
// Handler
Action<IQuery<WakeUpRequest, Avalanche.Void>> wakeupHandler = q => { Console.WriteLine("Wake Up!"); q.Response.SetCompleted(); };
// Create service
IService service = Services.Create(wakeupHandler);
// Create request
WakeUpRequest request = new WakeUpRequest();
// Invoke async
await service.InvokeAsync(request);
// </13>
}
{
// <20>
// Create service
IService service = Services.Create(ServiceHandlers.Instance);
// Create request
TypeRequest request = new TypeRequest("System.NotFound");
// Issue request
try
{
Type type = service.GetRequired<IRequest, Type>(request);
}
catch (Exception e) when (e.HResult == Services.MessageDescription.BadQueryNoValue.Code)
{
WriteLine("No result, type not found.");
}
// </20>
}
}
// <99>
struct WakeUpRequest { }
// </99>
}