|  | @@ -17,6 +17,17 @@ cimport cpython
 | 
	
		
			
				|  |  |  import grpc
 | 
	
		
			
				|  |  |  import threading
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +def _spawn_callback_in_thread(cb_func, args):
 | 
	
		
			
				|  |  | +  threading.Thread(target=cb_func, args=args).start()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +async_callback_func = _spawn_callback_in_thread
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def set_async_callback_func(callback_func):
 | 
	
		
			
				|  |  | +  global async_callback_func
 | 
	
		
			
				|  |  | +  async_callback_func = callback_func
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def _spawn_callback_async(callback, args):
 | 
	
		
			
				|  |  | +  async_callback_func(callback, args)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  cdef class CallCredentials:
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -40,7 +51,7 @@ cdef int _get_metadata(
 | 
	
		
			
				|  |  |      else:
 | 
	
		
			
				|  |  |        cb(user_data, NULL, 0, status, error_details)
 | 
	
		
			
				|  |  |    args = context.service_url, context.method_name, callback,
 | 
	
		
			
				|  |  | -  threading.Thread(target=<object>state, args=args).start()
 | 
	
		
			
				|  |  | +  _spawn_callback_async(<object>state, args)
 | 
	
		
			
				|  |  |    return 0  # Asynchronous return
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |