2016-03-28 12 views
0

リモートディレクトリにあるファイルを書き込む必要があります。ログアプリケーションを作成する必要があります。エラーが発生するたびに、このリモートファイルにアクセスして行を書きたいと思います。しかし、リモートディレクトリが利用できない場合、私は気にしません。私は、主なアプリケーションを実行し続けたいだけです。c#タイマー後のファイルへのアクセスをブロックする

通常、このリモートディレクトリへのアクセスには1秒かかります。 WriteLineメソッドが1秒以上かかる場合、ブロックしたい。

私はtry catchを試しましたが、アプリケーション全体が長時間ブロックされていました。私はこの試みを中断してより早く書く必要があります。

これはtxtファイルに書き込むために使用されるメインのコードです:私はこの問題を解決する方法を見つけ出すことはできません

try 
{   
    string TargetFile = "F:\\file.txt"; 
    using (StreamWriter sw = File.AppendText(TargetFile)) 
    { 
     sw.WriteLine("LOG: an error occured\n"); 
     sw.Close(); 
    } 
} 
catch (Exception) 
{ 

    throw; 
} 

。たぶん別のスレッドの中で書き込み操作を実行することによって?ご協力いただきありがとうございます!

+0

非同期方式で試しましたか?私はそれがこのようなIO操作のために素晴らしい作品だと聞きました。 https://msdn.microsoft.com/en-us/library/hh137902(v=vs.110).aspx – Hendry

+0

[Hangfire](http://hangfire.io/)のようなバックグラウンドジョブを使用することをお勧めします。 )または[Quartz](http://www.quartz-scheduler.net/)を参照してください。ファイルが別のプロセスで使用されている場合は、ジョブのスケジュールを変更できます。 – SarangK

+0

しかし、別のプロセスがファイルを使用する可能性は非常に低いです。そのため、リモートディレクトリにアクセスできない場合は、LOGを保存しないと大きな問題ではない場合は気にしません。その理由でメインアプリケーションが積み重なってしまわないようにするだけです。 – Emanuele

答えて

0

1)は、プロセスをスピードアップし、パフォーマンスを向上させることに成功したスレッドを使用し

あなたは純4.5を使用して、私は以下の書かれているブロックの上にいる場合)catchブロック内

2を投げていないのに役立ちます。これをプログラムに追加してください。

using System.Threading.Tasks;

var errorWriter = Task.Run(() => 

     { 
      try 
      { 
       string TargetFile = "F:\\file.txt"; 
       using (StreamWriter sw = File.AppendText(TargetFile)) 
       { 
        sw.WriteLine("LOG: an error occured\n"); 
        sw.Close(); 
        return "success"; 
       } 
      } 
      catch (Exception ex) 
      { 
       return ex.Message; 

       // throw; _________________ don't throw here 
      } 

     }); 
関連する問題