C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■12348  Re[2]: 質問)クラスの初歩 Part2
□投稿者/ Yosi -(2008/01/08(Tue) 13:32:58)
    No12330 (やまだ さん) に返信
    > 倉田さんの書かれてるとおりですが、ちょっとだけ補足。
    >
    > >'sample': メンバ名をそれを囲む型の名前と同じにすることはできません。
    > クラス名と同じ名前で定義できるのは「コンストラクタ」です。
    > それ以外のメソッドは別の名前で定義してください。
    > コンストラクタのつもりなら、宣言の仕方が間違っていると思います。
    >
    > >'MyExam1.MyExam1(int)' はアクセスできない保護レベルになっています。
    > そのとおり、クラスが公開されていないからアクセスできない、ということだと思います。
    >


    二つ目のソースで
    public void MyExamとして
    やってみたんですが
    今度は
    「引数を '1' 個指定できる、メソッド 'MyExam1' のオーバーロードはありません。」
    と表示されました
記事No.12325 のレス /過去ログ27より / 関連記事表示
削除チェック/

■31839  Re[9]: CreateWindowのタイトルにフォントを指定
□投稿者/ .SHO -(2009/01/29(Thu) 11:54:27)
    あーでも、自作しても結局タスクバー上の表示がバケバケにはなります。
記事No.31815 のレス /過去ログ56より / 関連記事表示
削除チェック/

■97667  Re[2]: VB.Net Main関数の非同期処理について
□投稿者/ RS -(2021/06/23(Wed) 16:31:43)
    No97663 (魔界の仮面弁士 さん) に返信
    > 2021/06/23(Wed) 14:58:31 編集(投稿者)
    >
    > ■No97661 (RS さん) に返信
    >>Main関数から、複数の非同期処理を呼び出したいのですが、
    > 「関数」という事は、Sub Main() ではなく、Function Main() As Integer なのかな?

    Sub Main()です。


    >>呼び出した非同期処理がすべて完了するまで待機したいです。
    > Task.WaitAll メソッドを試してみてください。
    > https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.tasks.task.waitall?view=netframework-4.8

    Task.WaitAll(非同期処理のList)としてみたのですが、ログを見る限り、タスクは開始されていましたが
    このタスクが完了する前にMainの処理が終わってしまっていました。


    >>Main関数をAsyncで宣言して良いのか、
    >>また、Mian関数を非同期処理として作成する方法がわかりません。
    > 終了するまで待ち合わせるのであれば、その呼び出し元は
    > 非同期処理では無く、同期処理ということになりますので、
    > Async Main にする必要は無いのでは。

    すみません、色々試しているうちに混乱してしまい、、、
    非同期処理がすべて完了する前に、Mainの処理が終わってしまい、結果非同期メソッドの中の処理が終わる前に
    アプリケーション自体が終わってしまっているのでは、と考えました。
    なので、非同期処理を呼び出しているMainでAwiteできないかな、と、、、






記事No.97661 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97668  Re[3]: VB.Net Main関数の非同期処理について
□投稿者/ 魔界の仮面弁士 -(2021/06/23(Wed) 17:24:10)
    2021/06/23(Wed) 17:33:23 編集(投稿者)

    No97667 (RS さん) に返信
    > Task.WaitAll(非同期処理のList)としてみたのですが、ログを見る限り、タスクは開始されていましたが
    > このタスクが完了する前にMainの処理が終わってしまっていました。

    WaitAll が受け付けるのは配列です。List は渡せませんよ。
    WhenAll と勘違いしていませんか?


    Task.WhenAll の場合、Task の終了を待たずに次の行に進みます。
    Task.WaitAll の場合、Task が終わるまでスレッドをブロックします。


    Imports System.Diagnostics
    Imports System.Threading
    Imports System.Threading.Tasks

    Module Module1
     Sub Main()
      Dim sw = Stopwatch.StartNew()
      Dim t1 As New List(Of Task)()
      t1.Add(Task.Run(Sub() Thread.Sleep(2000)))
      t1.Add(Task.Run(Sub() Task.Delay(2000)))
      t1.Add(Task.Delay(2000))
      Console.WriteLine("===> Task.WhenAll Start")
      Dim t = Task.WhenAll(t1)
      Console.WriteLine("<=== Task.WhenAll End at " & sw.Elapsed.ToString())
      t.Wait()
      Console.WriteLine("<=== Task.WhenAll Finished " & sw.Elapsed.ToString())

      sw = Stopwatch.StartNew()
      Dim t2 As New List(Of Task)()
      t2.Add(Task.Run(Sub() Thread.Sleep(2000)))
      t2.Add(Task.Run(Sub() Task.Delay(2000)))
      t2.Add(Task.Delay(2000))
      Console.WriteLine("===> Task.WaitAll Start")
      'Console.WriteLine(Task.WaitAll(t2.ToArray(), TimeSpan.FromMilliseconds(700)))
      'Console.WriteLine(Task.WaitAll(t2.ToArray(), Timeout.Infinite))
      Task.WaitAll(t2.ToArray())
      Console.WriteLine("<=== Task.WaitAll End at " & sw.Elapsed.ToString())

      Console.WriteLine("Hit Any Key...")
      Console.ReadKey()
     End Sub

    End Module
記事No.97661 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97669  Re[4]: VB.Net Main関数の非同期処理について
□投稿者/ RS -(2021/06/23(Wed) 17:43:12)
    No97668 (魔界の仮面弁士 さん) に返信
    > 2021/06/23(Wed) 17:33:23 編集(投稿者)
    >
    > ■No97667 (RS さん) に返信
    >>Task.WaitAll(非同期処理のList)としてみたのですが、ログを見る限り、タスクは開始されていましたが
    >>このタスクが完了する前にMainの処理が終わってしまっていました。
    >
    > WaitAll が受け付けるのは配列です。List は渡せませんよ。
    > WhenAll と勘違いしていませんか?
    >
    >
    > Task.WhenAll の場合、Task の終了を待たずに次の行に進みます。
    > Task.WaitAll の場合、Task が終わるまでスレッドをブロックします。
    >
    >
    > Imports System.Diagnostics
    > Imports System.Threading
    > Imports System.Threading.Tasks
    >
    > Module Module1
    >  Sub Main()
    >   Dim sw = Stopwatch.StartNew()
    >   Dim t1 As New List(Of Task)()
    >   t1.Add(Task.Run(Sub() Thread.Sleep(2000)))
    >   t1.Add(Task.Run(Sub() Task.Delay(2000)))
    >   t1.Add(Task.Delay(2000))
    >   Console.WriteLine("===> Task.WhenAll Start")
    >   Dim t = Task.WhenAll(t1)
    >   Console.WriteLine("<=== Task.WhenAll End at " & sw.Elapsed.ToString())
    >   t.Wait()
    >   Console.WriteLine("<=== Task.WhenAll Finished " & sw.Elapsed.ToString())
    >
    >   sw = Stopwatch.StartNew()
    >   Dim t2 As New List(Of Task)()
    >   t2.Add(Task.Run(Sub() Thread.Sleep(2000)))
    >   t2.Add(Task.Run(Sub() Task.Delay(2000)))
    >   t2.Add(Task.Delay(2000))
    >   Console.WriteLine("===> Task.WaitAll Start")
    >   'Console.WriteLine(Task.WaitAll(t2.ToArray(), TimeSpan.FromMilliseconds(700)))
    >   'Console.WriteLine(Task.WaitAll(t2.ToArray(), Timeout.Infinite))
    >   Task.WaitAll(t2.ToArray())
    >   Console.WriteLine("<=== Task.WaitAll End at " & sw.Elapsed.ToString())
    >
    >   Console.WriteLine("Hit Any Key...")
    >   Console.ReadKey()
    >  End Sub
    >
    > End Module

    なるほど!完全に勘違いしていました。
    解決できそうです!ありがとうございます!

記事No.97661 のレス / END /過去ログ169より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -