void MonitorFileDescriptors( int fileDescriptor1, int fileDescriptor2 )
{
  dispatch_source_t fd1Source = dispatch_source_create( DISPATCH_SOURCE_TYPE_READ, fileDescriptor1, 0UL, dispatch_get_main_queue() );
  dispatch_source_set_event_handler( fd1Source, ^{ readDataFromFileDescriptor( fileDescriptor1 ); } );
  dispatch_source_set_cancel_handler( fd1Source, ^{
	  dispatch_release( fd1Source );
    close( fileDescriptor1 ); 
  } );
  dispatch_resume( fd1Source );
  
  dispatch_source_t fd2Source = dispatch_source_create( DISPATCH_SOURCE_TYPE_READ, fileDescriptor2, 0UL, dispatch_get_main_queue() );
  dispatch_source_set_event_handler( fd2Source, ^{ readDataFromFileDescriptor( fileDescriptor2 ); } );
  dispatch_source_set_cancel_handler( fd2Source, ^{
	  dispatch_release( fd2Source );
    close( fileDescriptor2 ); 
  } );
  dispatch_resume( fd2Source );
  
  // Must call either dispatch_main(), [[NSRunLoop currentRunLoop] run], or CFRunLoopRun()
}