Esempio n. 1
0
        public virtual Task <object> dispatchMessageToAsyncSingleListener(FunctionContext context, string functionName)
        {
            /*return  Task.Run<T>(() => {
             *                  var result=dispatchMessageToSingleListener(context,functionName);
             *                  if (result!=null) return (T)result;
             *                  else return default(T);
             *          });
             */
            if (listenerMapDataType.ContainsKey(context.type))
            {
                AbstractListener ablistworker = getListener(functionName);
                if (ablistworker != null)
                {
#if DEBUG
                    Stopwatch timeOperations = Stopwatch.StartNew();
#endif
                    try
                    {
                        Task <object> task;
                        if (ablistworker.isAsyncMethod() || ablistworker.isYieldMethod())
                        {
                            if (main.infoctx.DebugMode)
                            {
                                getLogger().Debug("Calling Async dispatch " + ablistworker.getName());
                            }
                            task = ablistworker.addContextToGenericAsyncQueue(context);
                        }
                        else
                        {
                            if (main.infoctx.DebugMode)
                            {
                                getLogger().Debug("Calling Awaitable dispatch " + ablistworker.getName());
                            }
                            task = Task.Run <object>(async() =>
                            {
                                return(await ablistworker.addContextToGenericAsyncQueue(context));
                            });
                        }
                        return(task);
                    }
                    finally
                    {
#if DEBUG
                        timeOperations.Stop();
                        getLogger().Debug("Dispatched messageAsyc to " + ablistworker.getName() + " in " + timeOperations.ElapsedMilliseconds + "ms");
#endif
                    }
                }
                else
                {
                    getLogger().Warning("Not Found listener for function " + functionName);
                }
            }
            else
            {
                getLogger().Warning("Not Found listener for " + context.type);
            }

            return(null);
        }
Esempio n. 2
0
        public virtual Dictionary <string, Task <object> > dispatchMessageToAsyncListenersGetTasks(FunctionContext context)
        {
            Dictionary <string, Task <object> > tasksDict = new Dictionary <string, Task <object> >();

            if (listenerMapDataType.ContainsKey(context.type))
            {
                for (int i = 0; i < listenerMapDataType[context.type].Count; i++)
                {
#if DEBUG
                    Stopwatch timeOperations = Stopwatch.StartNew();
#endif
                    AbstractListener ablistworker = (AbstractListener)listenerMapDataType[context.type][i];
                    try
                    {
                        Task <object> task;
                        if (ablistworker.isAsyncMethod() || ablistworker.isYieldMethod())
                        {
                            if (main.infoctx.DebugMode)
                            {
                                getLogger().Debug("Calling Async dispatch " + ablistworker.getName());
                            }
                            task = ablistworker.addContextToGenericAsyncQueue(context);
                        }
                        else
                        {
                            if (main.infoctx.DebugMode)
                            {
                                getLogger().Debug("Calling Awaitable dispatch " + ablistworker.getName());
                            }
                            task = Task.Run <object>(async() =>
                            {
                                return(await ablistworker.addContextToGenericAsyncQueue(context));
                            });
                        }
                        tasksDict.Add(ablistworker.getName(), task);
                    }
                    finally
                    {
#if DEBUG
                        timeOperations.Stop();
                        getLogger().Debug("Dispatched MessageAsync to " + ablistworker.getName() + " in " + timeOperations.ElapsedMilliseconds + "ms");
#endif
                    }
                }
            }
            else
            {
                getLogger().Warning("Not Found listener for " + context.type);
            }

            return(tasksDict);
        }