将对观察者的多个调用合并为一个指标

Consolidate multiple calls to observer into one single metric

提问人:Chirag Arora 提问时间:1/28/2023 更新时间:1/28/2023 访问量:20

问:

我在我的类中设置了一个 WKHTTPCookieStoreObserver。我想检查我的 cookie 是否丢失,如果是,我想发出单个指标并再次设置 cookie。问题在于观察者是异步的,并且为单个事件创建多个指标。如何将对观察者的所有调用合并到一个指标中?

- (void)cookiesDidChangeInCookieStore:(WKHTTPCookieStore *)cookieStore {
        
    dispatch_async(dispatch_get_main_queue(), ^{
        [cookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *cookies) {
            NSString *cookieValue = nil;
            for (NSHTTPCookie *cookie in cookies) {
                if ([cookie.name isEqualToString:cookieName]) {
                    cookieValue = cookie.value;
                }
            }
            if (![cookieValue isEqualToString:expectedCookieValue]) {
                [self createAndPublishCookieMismatchMetric]; // this line gets called ~300 times
                [self writeCookieToWKWebsiteDataStore]; // write the missing cookie to the cookie store
            }
        }];
    });
}

我想合并所有 ~300 次对函数的调用,并只为此事件发出一个指标。即使我从下一行将 cookie 写回存储,看起来队列中已经有多个调用等待处理。正确的解决方案是什么?

iOS Objective-C iPhone

评论


答: 暂无答案