繁体   English   中英

等待来自 Xamarin/MAUI IOS Healthkit 查询的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM