【发布时间】:2016-10-26 06:38:06
【问题描述】:
我仍然不能完全理解 async/await 方法和线程以及究竟有什么区别,但我正在尝试使用它们以便更好地理解它们,所以请注意我所做的一切可能是根本性的错了。
我有一个用作服务器的控制台应用程序,首先它创建一个 HttpListener 对象并调用 BeginGetContext,每次回调函数执行时,它都会启动另一个 BeginGetContext。另一方面,在主线程中(我认为),我读取了给控制台的命令并在主线程中执行它。
现在我将数据存储在字典中,我可以使用这些命令对字典进行序列化和反序列化。我想在某个时候另一个正在运行的 c# 应用程序将使用这个序列化的数据来喜欢进程来进行统计或其他什么。我想如果一个程序正在读取这些数据,而另一个程序也试图读取它,它会抛出一些异常并破坏程序的流程并变成一堆乱七八糟的副本。因此,我每次想从任一程序获取数据时都考虑进行这些 try-catch 检查:
static bool IsFileAvailable(FileInfo file)
{
FileStream stream = null;
try { stream = file.Open(FileMode.Open); }
catch (IOException) { return false; }
finally { if (stream != null) stream.Close(); }
return true;
}
在主线程中,我测试,如果文件 IsFileAvailable,我得到文件,否则,我希望主线程继续执行,而某些方法(我猜是异步的)每隔一秒左右测试 IsFileAvailable,然后放弃之后可能是 30 秒,然后向控制台留言。我不完全知道使用什么方法来保持主线程和 HttpListener 请求都运行。我真的应该启动一个线程并关闭它以打开文件吗?我可能做的一切都错了吗?此外,如果异步函数在单独的线程上运行,程序不应该在某个时候用完线程吗? 在此先感谢并为这个冗长的问题道歉。
【问题讨论】:
-
发布一些代码比描述代码有用得多。
-
if async functions run on seperate threads- 他们没有。
标签: c# multithreading async-await