384 messaggi dal 26 agosto 2007
Ciao a tutti,
sto iniziando ad usare DocumentDB e quindi ho scaricato l'SDK per .NET. Seguendo l'esempio sto provando a creare dei documenti e salvarli sul db. Il codice dell'esempio è il seguente
   public static void Main(string[] args)
        {
            try
            {
                GetStartedDemo().Wait();
            }
            catch (DocumentClientException de)
            {
                // omissis
            }
        }
        private static async Task GetStartedDemo()
        {
            var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey);

            Family andersonFamily = new Family
            {
                Id = "AndersenFamily",
                LastName = "Andersen",
                Parents = new Parent[] {
                    new Parent { FirstName = "Thomas" },
                    new Parent { FirstName = "Mary Kay"}
                    },
                Children = new Child[] {
                        new Child
                        {
                            FirstName = "Henriette Thaulow",
                            Gender = "female",
                            Grade = 5,
                            Pets = new Pet[] {
                                new Pet { GivenName = "Fluffy" }
                            }
                        }
                    },
                Address = new Address { State = "WA", County = "King", City = "Seattle" },
                IsRegistered = true
            };

            await client.CreateDocumentAsync("dbs/" + database.Id + "/colls/" + documentCollection.Id, andersonFamily);

            client.Dispose();
        }

Questo codice funziona perfettamente. Il mio invece, che è praticamente identico eccetto per la classe che passo a DocumentDB per essere salvata in JSON, si blocca perennemente sulla riga
await client.CreateDocumentAsync("dbs/" + database.Id + "/colls/" + coll.Id, this);

Il mio codice completo è questo:
public static async Task Save(int UserId, int productID, string code, string language, string dataOraLettura, string longitudine, string latitudine, string nazione_lettura)
        {
            CultureInfo ciEN = CultureInfo.GetCultureInfo("en-US");
            CodeType ScannedCode = new CodeType
            {
                Code = code,
                ProductId = productID,
                ScanLog = new List<CodeType.ScanDataType>()
            };
            ScannedCode.ScanLog.Add(new CodeType.ScanDataType
            {
                Location = new Microsoft.Azure.Documents.Spatial.Point(double.Parse(longitudine, ciEN.NumberFormat), double.Parse(latitudine, ciEN.NumberFormat)),
                ScanType = CodeType.ScanDataType.eScanType.Alert,
                UserId = UserId.ToString(),
                TimeStamp = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssffff"))
            });
            await ScannedCode.AddAsync();

        }

   public async Task AddAsync()
        {
            using (DocumentClient client = new DocumentClient(new Uri(WebConfigurationManager.AppSettings["DbURI"]), WebConfigurationManager.AppSettings["DbKEY"]))
            {
                var CodeDocuments = client.CreateDocumentQuery<CodeType>("dbs/" + database.Id + "/colls/" + coll.Id).Where(a => a.Code == this.Code).ToArray();
                if (CodeDocuments.Length == 0)
                    await client.CreateDocumentAsync("dbs/" + database.Id + "/colls/" + coll.Id, this);
            }
        }

E' come se il task asincrono si bloccasse e non restituisse più il controllo al chiamante e restasse in esecuzione in loop.

Lunga vita e prosperità!!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.