8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

当多个 C# 任务在另一个任务完成时启动时会发生什么?

blogofsongs 3月前

76 0

假设我有以下代码:public async void Run(){ TaskCompletionSource t = new TaskCompletionSource(); Prepare(t.Task); await Task.Delay(1000); t.SetResult(); Console.

假设我有这样的代码:

public async void Run()
{
    TaskCompletionSource t = new TaskCompletionSource();
    Prepare(t.Task);
    await Task.Delay(1000);

    t.SetResult();
    Console.WriteLine("End");
}

public async void Prepare(Task task)
{
    await Run(task, "A");
    await Run(task, "B");
    await Run(task, "C");
    await Run(task, "D");
}

public async Task Run(Task requisite, string text)
{
    await requisite;
    Console.WriteLine(text);
}

时会发生什么 t.SetResult(); ?这是多线程吗?控制台中项目的顺序有任何保证吗?如果我有一个 List<> ,并且该 Run 方法会改变它,我需要担心多线程吗?

帖子版权声明 1、本帖标题:当多个 C# 任务在另一个任务完成时启动时会发生什么?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由blogofsongs在本站《multithreading》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我想使用 SDL2 创建 ASCII 艺术,但我不明白为什么我会得到这个结果:原始图像的程序输出](https://i.sstatic.net/1IUV743L.png)是](https://i.sstatic.net/ytrb2...

    我想使用 SDL2 创建 ASCII 艺术,但我不明白为什么我会得到这个结果: 原始图像的 程序输出 https://i.sstatic.net/1IUV743L.png https://i.sstatic.net/1IUV743L.png ) ]( https://i.sstatic.net/ytrb2R0w.png ) 它是一个 bmp 文件。看起来图像被复制了,下面有一个巨大的空白。但是,我的代码似乎是正确的。

    这是在控制台中绘制图像的代码

    #define ASCII_WIDTH 130
    #define ASCII_HEIGHT 100
    
    int asciiArt(SDL_Surface* image)
    {
        if(image == NULL)
            return 0;
    
        SDL_Surface *imgResized = SDL_CreateRGBSurface(0, ASCII_WIDTH, ASCII_HEIGHT, 32, 0, 0, 0, 0);
        if(imgResized == NULL)
            return 0;
    
        SDL_BlitScaled(image, NULL, imgResized, NULL);
    
        char ascii[] = " `.-':_,^=;><+!rc*/z?sLTv)J7(|Fi{C}fI31tlu[neoZ5Yxjya]2ESwqkP6h9d4VpOGbUAKXHm8RD#$Bg0MNWQ%&@";
        Uint32* pixel = NULL;
        SDL_Color color;
        Uint8 gray;
        int pos;
    
        SDL_LockSurface(imgResized);
    
        for(int i = 0; i < imgResized->h; i++)
        {
            for(int j = 0; j < imgResized->w; j++)
            {
                pixel = (Uint32*)imgResized->pixels + i * imgResized->pitch + j * imgResized->format->BytesPerPixel;
                SDL_GetRGB(*pixel, imgResized->format, &color.r, &color.g, &color.b);
                gray = (color.r + color.g + color.b) / 3;
    
                pos = gray * (strlen(ascii) - 1) / 255;
    
                printf("%c", ascii[pos]);
            }
            printf("\n");
        }
    
        SDL_UnlockSurface(imgResized);
    
        if(imgResized != NULL)
            SDL_FreeSurface(imgResized);
    
        return 1;
    }
    

    我很迷茫,不知道错误在哪里,也不知道从哪里开始查找。谢谢!

返回
作者最近主题: