4

サーバーのハードドライブ(サービスがインストールされている場所)とサーバーにマップされているネットワークドライブの間でファイルを移動するWindowsサービスを作成しました。ソリューションの作成中に遭遇した問題の1つは、ネットワークの問題でした。

チェック時にタイムアウトを設定しているときに、ネットワークドライブが存在するかどうかを確認するにはどうすればよいですか?タイムアウトした場合は、例外をキャッチしてX分以内に再試行し、アイテムをキューに残します。

ありがとう!

4

2 に答える 2

8

呼び出しを別のスレッドに入れ、特定のタイムアウト後にスレッドを閉じます。次のリンクは、メソッドのタイムアウトロジックを実装しています。

http://kossovsky.net/index.php/2009/07/csharp-how-to-limit-method-execution-time/

編集

上記のトピックに関するコメントの1つは、.NET非同期パターンを使用したより良い実装を示唆しています。

public static T SafeLimex<T>(Func<T> F, int Timeout, out bool Completed)   
   {
       var iar = F.BeginInvoke(null, new object());
       if (iar.AsyncWaitHandle.WaitOne(Timeout))
       {
           Completed = true;
           return F.EndInvoke(iar);
       }
         F.EndInvoke(iar);
         Completed = false;
       return default(T);
   } 
于 2011-01-18T06:02:49.810 に答える
0

私が覚えている限り、通常のSystem.IO方法を使用するとうまくいきます。したがって、この場合は、単に次を使用します。

if (Directory.Exists("Z:\\MyNetworkFolder"))
{
    // Gogogo
}
else
{
    Thread.Sleep(MyTimeout);
}

フォルダが存在しない場合は、選択したタイムアウトの間一時停止します。これで完全に機能するはずです。

于 2011-01-18T05:55:29.200 に答える