我开始学习C#5和.Net 4.5中的异步编程,有些东西我不明白.
private static int count;
public static void Main()
{
LoopTest();
Console.ReadKey(false);
}
static async void LoopTest()
{
count = 0;
for (var index = 0; index < 10; ++index)
{
Console.WriteLine( "({0}) In Loop before await, Index {1}, Thread: {2}", count++, index, Thread.CurrentThread.ManagedThreadId);
await Task.Factory.StartNew(() => Thread.Sleep(10));
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
(0) In Loop before await, Index 0, Thread: 9
(1) In Loop before await, Index 1, Thread: 10
(2) In Loop before await, Index 2, Thread: 11
(3) …Run Code Online (Sandbox Code Playgroud) 我需要能够:
我正在寻求一个过程,我没有办法检查孩子的execvp是否有效.如果失败了,我需要知道它失败了.目前我正在使用
-1 != waitpid( pid, &status, WNOHANG )
Run Code Online (Sandbox Code Playgroud)
但似乎如果pid进程的execv失败,waitpid不会返回-1.
我该怎么检查?我读了waitpid手册页,但我不清楚; 也许我的英语不够好.
编辑:为了解释更多:
我正在为家庭作业建立自己的终端.我需要输入一个命令字符串,让我们说"ls",然后我必须执行命令.
在子forks之后,子进程调用execvp来执行命令(在我解析字符串之后),并且父进程需要检查命令末尾是否有'&'.
如果命令末尾不存在符号'&',则父进程需要等待子进程执行.
所以我需要知道execvp是否失败了.如果它没有失败,则父使用waitpid等待子进程完成执行.如果失败,那么父母将不会等待孩子.
我正在将文本文件中的数据下载到数据库表中.文件中的数据偶尔会在字段级别损坏(文件以逗号分隔.csv文件)
我正在将每一行读入一个对象,该对象表示具有正确数据类型属性的数据行.
如果由于狡猾的数据导致读入对象失败,我想将该行读入与第一个类似的对象,只有这一个将所有数据类型设置为字符串,因此读入它不应该是fal.
我的想法是,我可以创建一个有效的记录对象集合,我将加载到相应的db表中,以及我将加载到例外表中的异常集合.然后可以稍后处理这些.
所以 - 问题: 我将遍历文本文件的行并将它们加载到对象中并将对象添加到集合中.这周围会有一个try/catch循环,如果对象加载失败,那么在catch部分我将加载异常对象并将其添加到异常集合中.
但是,如果异常对象加载失败(无论出于何种原因)会发生什么.我是否尝试了一下try/catch并记录异常 - 即try/catch中的try/catch?
有没有更好的方法呢?
我正在学习中断和键盘硬件中断,例如中断 9(在 dos 中)。我注意到,如果我按箭头键(左、右、上、下),则会出现两个连续的中断。第一个是“Shift”按钮中断,第二个是我按下的箭头键。
我注意到了这一点,因为我重写并配置了键盘的数字9中断来提示按下按钮的扫描码。
例如,当我按下右箭头键时,我会看到发生了“Shift”按钮中断(在屏幕上显示扫描码 42),然后是我按下的箭头键(右箭头键)还发送一个中断(扫描代码 77)。
我的问题是,为什么会发生这种情况?
我的 int 9 代码:
void interrupt interrupt_9_Implementation{
unsigned char scanCode;
asm{
in al, 60h // read the keyboard input from port 60h ( 96 Decimal ) into al;
mov scanCode, al // save the keyboard input into 'scanCode' varaible
in al, 61h // read 8255 port 61h ( 97 Decimal ) into al
or al, 128 // set the MSB - the keyboard acknowlege signal
out 61h, al // send the …Run Code Online (Sandbox Code Playgroud) 我刚刚开始研究现有的大项目.其中一些包含遗留代码.
我被要求编写一个组件(将在同一个进程中运行),该组件应在发生致命错误或发生情况时发出警报并重新启动服务器.
例如,当抛出OutOfMemoryException时,我应该警告客户端,然后重新启动服务器.问题是,搜索所有现有的Try-catch块然后编辑并向其catch块添加新代码将是困难和耗时的.更重要的是,新的程序员可以添加一个新的try-catch块,如果捕获了OutOfMemoryException则忘记警告.
您是否知道如何监视/侦听OutOfMemoryException(以及类似的异常),而无需查找和编辑(并可能添加)每个现有和未来的Try-catch块?
我正在使用.Net 4.
编辑: