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

jim*_*wan 3 objective-c nstask ios

 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
        {
        }
Run Code Online (Sandbox Code Playgroud)

dataTaskWithRequest用来发送异步http请求,在完成块中,我想运行一个python script.

 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];
Run Code Online (Sandbox Code Playgroud)

python任务可能需要很长的时间,所以我应该等待其完成.但是NSTaskDidTerminateNotification因为它NSTask是在一个单独的线程中运行所以不会被发送.任何人都知道如何NSTask在这种情况下等待完成?

vad*_*ian 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];
Run Code Online (Sandbox Code Playgroud)