Πρόλαβα επιτέλους να σκαλίσω λίγο όσα συζητούσαμε για ADO.NET Data Services και asynchronous calls και είδα ότι όχι μόνο υπάρχει το DataServiceQuery και στον .NET client, αλλά ... το LINQ query είναι το ίδιο ένα DataServiceQuery. Οπότε, όχι μόνο μπορεί κανείς να εκτελέσει ασύγχρονα ένα query, αλλά μπορεί να το γράψει και με LINQ. Για παράδειγμα, μπορώ να γράψω
TeachingEntities entities = new TeachingEntities(new Uri(@"http://localhost:1069/SchoolSvc.svc/"));
var query = entities.CreateQuery<Course>(@"Course(1)");
var result = query.Execute();
foreach (var course in result)
{
Console.WriteLine(course.CourseID);
}
αλλά και
DataServiceQuery<Course> q = (DataServiceQuery<Course>) (from c in entities.Course
where c.CourseID == 1
select c);
q.BeginExecute(r =>{
var r2 = (IEnumerable<Course>) r.AsyncState;
foreach (var course in r2)
{
Console.WriteLine(course.CourseID);
}
}, q);
όπου έχωσα ένα anonymous delegate για λόγους ... τεμπελιάς. Στη δεύτερη περίπτωση η κλήση γίνεται άμεσα και η επεξεργασία των αποτελεσμάτων γίνεται όταν γυρίσουν τα αποτελέσματα.
Καλό!
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos