[英]Awaiting data from Xamarin/MAUI IOS Healthkit query
我不熟悉线程、等待和委托等。我有以下问题。 这个方法:
public HKSample[] Get(DateTime from, DateTime? to)
{
HKSample[] result = null;
var restingHeartRateType = HKQuantityType.Create(HKQuantityTypeIdentifier.RestingHeartRate);
var predicate = HKQuery.GetPredicateForSamples(from.ToNSDate(), to.HasValue ? to.Value.ToNSDate() : null, HKQueryOptions.None);
var q = new HKSampleQuery(
restingHeartRateType,
predicate,
500,
new NSSortDescriptor[] { },
new HKSampleQueryResultsHandler(
(HKSampleQuery query2, HKSample[] results, NSError error2) =>
{
result = results;
}));
healthKitStore.ExecuteQuery(q);
return result;
}
在 resultshandler 设置方法返回变量之前返回。 如何在完成该方法之前等待结果变量被设置?
我正在做大量的 healthkit 调查,我对 xamarin/maui c# 的采样/记录如此之少感到震惊。
一般来说,如果一个任务或者function耗时比较长,我们一般建议异步执行代码。 否则,程序很容易崩溃或被阻塞。
如果要等待 function 完成后再执行后续操作,可以使用Async and await
来执行。
请参考以下代码:
async void callMethod() {
Task<HKSample[]> task = Get(from, to);
HKSample[] hKs = await task;
}
public async Task<HKSample[]> Get(DateTime from, DateTime? to)
{
HKSample[] result = null;
var restingHeartRateType = HKQuantityType.Create(HKQuantityTypeIdentifier.RestingHeartRate);
var predicate = HKQuery.GetPredicateForSamples(from.ToNSDate(), to.HasValue ? to.Value.ToNSDate() : null, HKQueryOptions.None);
var q = new HKSampleQuery(
restingHeartRateType,
predicate,
500,
new NSSortDescriptor[] { },
new HKSampleQueryResultsHandler(
(HKSampleQuery query2, HKSample[] results, NSError error2) =>
{
result = results;
}));
healthKitStore.ExecuteQuery(q);
return result;
}
关于 async 和 await 的更多信息,您可以查看: Asynchronous programming with Async and Await (Visual Basic)和Async And Await In C# 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.