Ejemplo n.º 1
0
        private async Task <WriteDataItemsResult> AdapterWriteTask(AdapterState adapter, List <DataItemValue> items, Duration?timeout)
        {
            if (adapter.State != State.Running)
            {
                string err = "Adapter is not in state Running. Current state: " + adapter.State;
                Log_Warn("WriteStateError", err);
                adapter.SetOfPendingWriteItems.ExceptWith(items.Select(it => it.ID));
                FailedDataItemWrite[] failures = items.Select(it => new FailedDataItemWrite(it.ID, err)).ToArray();
                return(WriteDataItemsResult.Failure(failures));
            }

            try {
                IList <WriteTask>             writeTasks = adapter.WriteItems(items, timeout);
                Task <WriteDataItemsResult>[] tasks      = writeTasks.Select(writeTask => writeTask.Task.ContinueWith(t => {
                    adapter.SetOfPendingWriteItems.ExceptWith(writeTask.IDs);
                    return(t.Result);
                })).ToArray();

                WriteDataItemsResult[] res = await Task.WhenAll(tasks);

                return(WriteDataItemsResult.FromResults(res));
            }
            catch (Exception exception) {
                Exception             exp      = exception.GetBaseException() ?? exception;
                string                err      = adapter.Name + " adapter exception: " + exp.Message;
                Task                  ignored  = RestartAdapterOrCrash(adapter, "Write exception: " + exp.Message);
                FailedDataItemWrite[] failures = items.Select(it => new FailedDataItemWrite(it.ID, err)).ToArray();
                return(WriteDataItemsResult.Failure(failures));
            }
        }
Ejemplo n.º 2
0
 public WriteDataItemsResult GetWriteResult()
 {
     if (failures.Count == 0)
     {
         return(WriteDataItemsResult.OK);
     }
     else
     {
         return(WriteDataItemsResult.Failure(failures.ToArray()));
     }
 }