Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何控制在单个文件中写入的线程;不能使用锁_C#_Multithreading_Visual Studio 2010 - Fatal编程技术网

C# 如何控制在单个文件中写入的线程;不能使用锁

C# 如何控制在单个文件中写入的线程;不能使用锁,c#,multithreading,visual-studio-2010,C#,Multithreading,Visual Studio 2010,我正在创建线程,每个线程将执行一些任务并写入消耗的时间;在单个文件中完成任务所需的时间。我不能使用锁,因为如果线程进入等待状态,我无法测量线程完成任务所需的确切时间 是否有任何解决方案,我可以跟踪线程完成任务所花费的确切时间。任务是运行一个有一些耗时工作的函数。您可以异步写入文件。在这种情况下,线程调用另一个任务,该任务将写入文件并继续执行,而另一个任务将等待锁定 另一种解决方案-您可以使用队列(例如MSMQ)发送日志消息,并从队列另一端的单个线程写入文件。使用Ticks属性获取最细粒度的详细信

我正在创建线程,每个线程将执行一些任务并写入消耗的时间;在单个文件中完成任务所需的时间。我不能使用锁,因为如果线程进入等待状态,我无法测量线程完成任务所需的确切时间


是否有任何解决方案,我可以跟踪线程完成任务所花费的确切时间。任务是运行一个有一些耗时工作的函数。

您可以异步写入文件。在这种情况下,线程调用另一个
任务
,该任务将写入文件并继续执行,而另一个
任务
将等待锁定


另一种解决方案-您可以使用队列(例如MSMQ)发送日志消息,并从队列另一端的单个线程写入文件。

使用
Ticks
属性获取最细粒度的详细信息。一个刻度是100纳秒,所以除以10可以得到微秒。

你说的“在一个文件中完成一项任务所需的时间”是什么意思?这些线是做什么的?一些工作,然后写入文件?或者工作是写在文件中?您可以在单个线程中“序列化”写操作。标题为“…线程…文件…锁”;描述上写着“…测量所用的时间…”;标记是通用的“多线程”。请考虑编辑这个问题。看看乔恩SKET的回答,可能的排队复制是一个不错的选择,但是当两个线程同时尝试在队列中写入时呢?MSMQ是一个服务。使用第一条消息时,拒绝另一条消息是不正确的。但第一个解决方案在部署上更简单。