using System.Threading.Tasks;
var test = new GwPInvokes();
var tcs = new TaskCompletionSource<Tuple<string, string>>();
test.find_gw(null, 0, new GwPInvokes.Callback(new Action<IntPtr, string, string>((ptr, gwddr, gwname) => tcs.SetResult(new Tuple<string,string>(gwddr, gwname)))));
var result = tcs.Task.Result;
Console.WriteLine("Job is done: {0}, {1}", result.Item1, result.Item2);
public delegate void Callback(IntPtr ptr,string gwddr,string gwname);
public bool find_gw(object broadcastaddr, int timeout, Callback callback)
callback(IntPtr.Zero, "aaa", "bbb");