Exemplo n.º 1
0
        public async Task <KeyValuePair <Integration, object[]> > GetActivityAsync(Guid integrationId, Type typeofT)
        {
            if (!ServiceConfiguration.integrationActivites.ContainsKey(typeofT))
            {
                return new KeyValuePair <Integration, object[]> {
                }
            }
            ;
            var activitiesOfTypeT = ServiceConfiguration.integrationActivites[typeofT];

            return(await await dataContext.Integrations.FindAuthorizedAsync(integrationId,
                                                                            async integration =>
            {
                if (!activitiesOfTypeT.ContainsKey(integration.method))
                {
                    return new KeyValuePair <Integration, object[]> {
                    }
                }
                ;
                var activities = await activitiesOfTypeT[integration.method]
                                 .Select(
                    async invocation =>
                {
                    var kvp = invocation(integration,
                                         obj =>
                    {
                        var ir = new InvocationResult
                        {
                            obj = obj,
                            success = true,
                        };
                        return ir.AsTask <object>();
                    },
                                         why =>
                    {
                        var ir = new InvocationResult
                        {
                            why = why,
                            success = false,
                        };
                        return ir.AsTask <object>();
                    });
                    var irResultTask = kvp as Task <InvocationResult>;
                    var irResult = await irResultTask;
                    return irResult;
                })
                                 .AsyncEnumerable()
                                 .Where(ir => ir.success)
                                 .Select(ir => ir.obj)
                                 //.SelectAsyncOptional<ServiceConfiguration.IntegrationActivityDelegate, object>(
                                 //    async (invocation, select, skip) =>
                                 //    {
                                 //        var resultTask = (Task<object>)invocation(integration,
                                 //            (obj) => select(obj).AsTask<object>(),
                                 //            (why) => skip().AsTask<object>());
                                 //        var result = await resultTask;
                                 //        return (EnumerableAsync.ISelected<object>)(result);
                                 //    })
                                 .ToArrayAsync();
                return integration.PairWithValue(activities);
            },
                                                                            () => (new KeyValuePair <Integration, object[]> {
            }).ToTask()));
        }