OVRTask\<int\> MyOpAsync() {
_id = Guid.NewGuid();
var task = OVRTask.Create\<int\>(id);
return task;
}
// later, when the task completes:
void Update() {
if (operationComplete) {
OVRTask.SetResult(_id, result);
}
}
async void OnButtonPressed() {
var result = await MyOpAsync();
}
ValueTuple\<T1, T2\>
var (result1, result2) = await OVRTask.Combine(task1, task2);
ValueTuple\<T1, T2, T3\>
var (result1, result2, result3) = await OVRTask.Combine(task1, task2, task3);
ValueTuple\<T1, T2, T3, T4\>
var (result1, result2, result3, result4) = await OVRTask.Combine(task1, task2, task3, task4);
ValueTuple\<T1, T2, T3, T4, T5\>
var (result1, result2, result3, result4, result5) = await OVRTask.Combine(task1, task2, task3, task4, task5);
ValueTuple\<T1, T2, T3, T4, T5, T6\>
var (result1, result2, result3, result4, result5, result6) = await OVRTask.Combine(task1, task2, task3, task4, task5, task6);
ValueTuple\<T1, T2, T3, T4, T5, T6, T7\>
var (result1, result2, result3, result4, result5, result6, result7) = await OVRTask.Combine(task1, task2, task3, task4, task5, task6, task7);
ValueTuple\<T1, T2, T3, T4, T5, T6, T7, T8\>
var (result1, result2, result3, result4, result5, result6, result7, result8) = await OVRTask.Combine(task1, task2, task3, task4, task5, task6, task7, task8);
async OVRTask\<bool\> DoSomethingAsync() {
var anchor = await OVRAnchor.CreateSpatialAnchorAsync(pose); // \<\– implicitly generated OVRTask\<bool\>
SomeMethodThatThrows();
returntrue;
}
OVRTask\<bool\> task = DoSomethingAsync();
// later...
if (task.IsFaulted) {
throw task.GetException();
}
if (task.HasResult) {
result = task.GetResult();
returntrue;
} else {
result = default;
returnfalse;
}
// Something that returns an OVRTask\<T\>
var task = GetResultAsync();
// compiler uses GetAwaiter here
var result = await task;
var result = await GetResultAsync();
async OVRTask\<OVRAnchor\> DoSomethingAsync() {
var anchor = await OVRAnchor.CreateSpatialAnchorAsync(pose); // doesn't throw
thrownew Exception(); // Cannot be caught if using ContinueWith
return anchor;
}
async void MethodA() {
try {
var anchor = await DoSomethingAsync();
} catch (Exception e) {
// okay; exception caught!
}
}
void MethodB() {
DoSomethingAsync().ContinueWith(anchor =\> {
Debug.Log($"Anchor {anchor} created!");
});
}