void async_call() { RpcPromise p = new RpcPromise(); p.then(_ => { prx.echo_async("this is a sync text", delegate(string result, RpcAsyncContext ctx) { Console.WriteLine("echo() result:" + result); ctx.promise.data = result; ctx.onNext(); //ctx.again(); }, _.promise); }).then(_ => { prx.timeout_async(1, delegate(RpcAsyncContext ctx) { Console.WriteLine("timeout completed!"); ctx.onNext(); },_.promise); }); RpcPromise pe = p.error(_ => { Console.WriteLine("async call error:"+ _.exception.ToString()); _.onNext(); }); p.final(_ => { Console.WriteLine(" commands be executed completed!"); }); p.end(); }
/** * at here , new promise be created as Error processing fork. * you can promise.wait util the error-routine return. */ public RpcPromise error(OnNext error) { RpcPromise promise = new RpcPromise(); if (true) { OnNext succ = null; if (_sucesslist.Count != 0) { succ = _sucesslist[_sucesslist.Count - 1]; // select last OnNext } KeyValuePair <RpcPromise, OnNext> kv = new KeyValuePair <RpcPromise, OnNext>(promise, succ); _errorlist.Add(kv); promise._nextPromise = this; promise.then(error); } return(promise); }
void test_promise() { RpcPromise p = new RpcPromise(); p.then(delegate(RpcAsyncContext ctx) { ctx.promise.data = "abc"; Console.WriteLine("step 1.1"); ctx.promise.onNext(ctx); }).then(delegate(RpcAsyncContext ctx) { Console.WriteLine("step 1.2"); Console.WriteLine(ctx.promise.data); //ctx.promise.onNext(ctx); ctx.promise.onError(ctx); }); RpcPromise p2 = p.error(delegate(RpcAsyncContext ctx) { //p.onNext(ctx,ctx.promise); Console.WriteLine("step 2.1"); ctx.promise.onError(ctx); }); RpcPromise p3 = p2.error(delegate(RpcAsyncContext ctx) { Console.WriteLine("step 3.1"); ctx.promise.onNext(ctx); }); p3.then(delegate(RpcAsyncContext ctx) { Console.WriteLine("step 2.2"); ctx.promise.onNext(ctx); }); p.then(delegate(RpcAsyncContext ctx) { Console.WriteLine("step 1.3"); ctx.promise.onNext(ctx); }).final(delegate(RpcAsyncContext ctx) { Console.WriteLine("final."); Console.WriteLine(ctx.promise.data); Console.ReadKey(true); }).end(); }
/** * at here , new promise be created as Error processing fork. * you can promise.wait util the error-routine return. */ public RpcPromise error(OnNext error ) { RpcPromise promise = new RpcPromise(); if(true) { OnNext succ = null; if (_sucesslist.Count != 0) { succ = _sucesslist[_sucesslist.Count - 1]; // select last OnNext } KeyValuePair<RpcPromise,OnNext> kv = new KeyValuePair<RpcPromise, OnNext>(promise,succ); _errorlist.Add( kv ); promise._nextPromise = this; promise.then(error); } return promise; }