如何在异步块中等待NSTask完成

3
 NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (error)
        {
            NSLog(@"Did fail with error %@" , [error localizedDescription]);
            fail();
            return ;
        }
        else
        {
        }

我使用dataTaskWithRequest发送异步HTTP请求,在完成块中,我想运行一个python脚本

 NSTask * task = [[NSTask alloc] init];
    [task setLaunchPath:kPythonPath];
    [task setArguments:@[self.scriptFileFullPath,outputFile]];
    [task launch];
    [task waitUntilExit];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkPythonTaskStatus:) name:NSTaskDidTerminateNotification object:task];

Python任务可能需要很长时间,因此我需要等待其完成。但是,由于NSTask在单独的线程中运行,因此不会发送NSTaskDidTerminateNotification通知。有没有人知道如何在这种情况下等待NSTask完成?

1个回答

6

NSTask有一个属性terminationHandler

当任务完成时,将调用完成块。任务对象会被传递到块中,以允许访问任务参数,例如确定任务是否成功完成。


NSTask * task = [[NSTask alloc] init];
task.launchPath = kPythonPath;
task.arguments = @[self.scriptFileFullPath, outputFile];
task.terminationHandler = ^(NSTask *task){
 // do things after completion
};
[task launch];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接