j'ai écrit un programme simple, voici à quoi il ressemble, certains détails cachés:Linq exécution différée
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace routeaccounts
{
class Program
{
static void Main(string[] args)
{
//Draw lines from source file
var lines = File.ReadAllLines("accounts.txt").Select(p => p.Split('\t'));
//Convert lines into accounts
var accounts = lines.Select(p => new Account(p[0], p[1], p[2], p[3]));
//Submit accounts to router
var results = accounts.Select(p => RouteAccount(p));
//Write results list to target file
WriteResults("results.txt", results);
}
private static void WriteResults(string filename, IEnumerable<Result> results)
{
... disk write call ...
}
private static Result RouteAccount(Account account)
{
... service call ...
}
}
}
Ma question est - évidemment, lors de la sélection d'un contexte de données, l'exécution est reportée. Si vous remarquez, dans la première déclaration de la fonction 'Main', j'interroge à partir de File.ReadAllLines ("accounts.txt"). Est-ce un mauvais choix? Si j'énumère le résultat final, cette déclaration sera-t-elle répétée?
Je peux simplement .ToArray() ou saisir les résultats à l'avance, si je sais que c'est un problème, mais je suis curieux de savoir ce qui se passe dans les coulisses.
c'est un bon conseil, j'ai eu des problèmes avec LINQ où l'exécution différée a effectivement causé des exceptions à être lancées dans des endroits que je ne m'attendais pas à devoir gérer. – Sprague