2011-02-09 5 views
1

"Hello World!"を印刷するために修正する必要があるコードがあります。何らかの理由で、スクランブルされたすべての文字を印刷します。"Hello World!"を正しく印刷するようにコードを修正する方法

Sub Main() 
    Dim s As String = "Hello World!" 
    Parallel.For(0, s.Length, Sub(i) 
           Console.Write(s(i)) 
           End Sub) 
    Console.Read() 
End Sub 

お勧めはありますか?

+0

これは、「並列」と同じです。 – SLaks

+0

*すべてのコードを誰が編集したのですか? (元に戻す) – SpiffySponge

+0

質問のすぐ下にある:Shobanがした、そして私は彼に感謝します。 –

答えて

0

おそらく、あなたはParallelOptionsパラメータを使用して、必要な並列度を指定することができます。この場合、並列処理は必要ありません。


Sub Main() 

     Dim s As String = "Hello World!" 

     Dim p As New ParallelOptions() 
     p.MaxDegreeOfParallelism = 1 
     p.TaskScheduler = Nothing 
     p.CancellationToken = Nothing 

     Parallel.For(0, s.Length, p, Sub(i) 

             Console.Write(s(i)) 

            End Sub) 

     Console.Read() 

    End Sub 
+0

ここで 'Parallel'を使う理由はありません。適切な場合の例は、数字の列をダウンロードして追加した後、その合計をサーバーに送り返すことです。その場合は、それぞれに異なる時間がかかる数多くの異なるタスクがあり、別のタスクを開始する前に1つのタスクを完了するのを待つ必要はありません。 –

+0

ところで、あなたはすばらしい旅に出掛けています:-) –

+0

@Rice - 「素晴らしい旅に乗る」とはどういう意味ですか? – SpiffySponge

5

パラレル実行のポイントは、パラレルで実行される点であり、連続して実行される点ではありません。命令は非常に重要なので、並列実行はこのタスクには意味がありません。

非同期/並列実行では、各タスクは他のタスクと並列に実行されるように分割されており、前のタスクが完了するまで待機しません。あなたのケースでは、後でキューに入れられたタスクのいくつかは、それらの前にキューイングされたタスクの前に完了しており、それは一見ランダムな順序で文字を並べ替えます。

+0

並行して実行される作業項目は、並べ替えまたは順序付けされません。 – SpiffySponge

+1

'Parallel'を使ってタスクを開始するとすぐ、それは本質的にそれ自身です。完了すると完了し、他のすべての並列タスクとは独立しています。 –

+0

@ SpiffySponge:ここでの注文よりも重要なことは、アクションが逐次実行されなければならないということです。 –

7
Sub Main() 
    Console.Write("Hello World!") 
End Sub 

あなたが本当に一度に一つの文字を印刷する必要がある場合は、書くことができます:

Sub Main() 
    dim s as string = "Hello World!" 
    dim i as integer 
    for i=0 to s.length-1 
     Console.Write(s(i)) 
    end for 
End Sub 
+0

元の質問のコードは、一度に1文字の式を印刷するように設定されています。なぜあなたはそれをしたいのですか? –

+2

あなたは私の日に光をもたらしました! – dotalchemy

+0

インライン変数宣言 'for i for integer = 0 to s.length - 1'の使用をお勧めします。 – SpiffySponge

関連する問題