2017-03-15 12 views
0

問題は、必要な数の見出しの代わりに、その書類に部分だけが書き込まれるということです。コンソール出力はOKです。C#AngleSharp解析ストリームで何が問題になっていますか?

ここでコード:問題は見出しの異なる数がファイルに書き込まれis.A、そして後者は、スレッドがブロックされたり、プログラムが単純に閉じているcompletely.Maybeされていないものを

using AngleSharp; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 


namespace AngleSharp 

{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("ok start"); 
      Mainpar(); 
      Console.ReadKey(); 
     } 
    static async Task Mainpar() 
    { 
     // Setup the configuration to support document loading 
     var config = Configuration.Default.WithDefaultLoader(); 
     // Load the names of all The Big Bang Theory episodes from Wikipedia 
     var address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes"; 
     // Asynchronously get the document in a new context using the configuration 
     var document = await BrowsingContext.New(config).OpenAsync(address); 
     // This CSS selector gets the desired content 
     var cellSelector = "tr.vevent td:nth-child(3)"; 
     // Perform the query to get all cells with the content 
     var cells = document.QuerySelectorAll(cellSelector); 
     // We are only interested in the text - select it with LINQ 
     var titles = cells.Select(m => m.TextContent).ToArray(); 

     var allnum = titles.Count(); 

     System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\bd.txt"); 
     for (int i = 0; i <= allnum; i++) 
     { 
      sw.WriteLine(titles[i] + i); 
      Console.WriteLine(titles[i] + i); 
     }  
     } 
    } 
} 

ませんアイデア。私はそれがどのように依存するのか理解していません

答えて

0

ストリームを正しく閉じる必要があります。おそらく起こっていることは、ファイルがフラッシュされずにプログラムが終了したときにストリームが強制的に閉じられていることです。代わりに、usingステートメントでラップしてみてください。

using (var sw = new System.IO.StreamWriter(@"C:\bd.txt")) 
    { 
     for (int i = 0; i <= allnum; i++) 
     { 
      sw.WriteLine(titles[i] + i); 
      Console.WriteLine(titles[i] + i); 
     } 
    } 

using文は、ストリームが適切に閉じられて、あなたがそれを使用して終了したディスクにフラッシュされていることを確認します。また

、あなたはMainPar方法でawaitを使用していない、また、あなたのmainメソッドでawaitを使用して、それを呼び出しているので、それasyncをマークするために十分な理由がありません。それはちょうどstatic voidでなければなりません。 asyncキーワードをメソッドに追加するだけでは、非同期に呼び出さない限り役に立ちません。

static void Main(string[] args) 
    { 
     Task.Run(async() => 
     { 
      Console.WriteLine("ok start"); 
      await Mainpar(); 
      Console.ReadKey(); 
     }).GetAwaiter().GetResult(); 
    } 
:あなたは、このようなあなたのMainメソッドで呼び出すことができます

using (var sw = new System.IO.StreamWriter(@"C:\bd.txt")) 
    { 
     for (int i = 0; i <= allnum; i++) 
     { 
      await sw.WriteLineAsync(titles[i] + i); 
      Console.WriteLine(titles[i] + i); 
     } 
    } 

:あなたは本当に非同期するMainParを望んでいた場合、あなたはStreamWriter.WriteLineAsync(string)メソッドを使用することができます

関連する問題