等待抽象函数完成c#

本文关键字:抽象函数 等待 | 更新日期: 2023-09-27 18:00:13

我有两个类(CLASS1和CLASS2),从CLASS1我调用一个抽象方法,我需要等待它的结束并显示消息"end Process…",我该如何解决这个问题?

1类:

public abstract partial class CLASS1 : Form
{
    public CLASS1()
    {
        Console.WriteLine("Start Process ABSMethod1");
        ABSMethod1("var1", "var2");
        Console.WriteLine("End Process ABSMethod1");
        Console.WriteLine("Start Process ABSMethod2");
        ABSMethod2(1, 2);
        Console.WriteLine("End Process ABSMethod2");
    }
    protected abstract void ABSMethod1(String var1, String var2);
    protected abstract void ABSMethod2(int var1, int var2);
}

2类:

class CLASS2: CLASS1
{
    protected override void ABSMethod1(String var1, String var2)
    {
        if (var1 == "test")
        {
            Task.Factory.StartNew(() =>
            {
                Parallel.ForEach<clssmt>(items, item =>
                {
                    /* ... */
                });
            });
        }
        //if i use Task.Wait() freezes UI.
    }
    protected override void ABSMethod2(int var1, int var2)
    {
        Task.Factory.StartNew(() =>
        {
            Parallel.ForEach<clssmt>(items, item =>
            {
                /* ... */
            });
        });
    }
}

我使用protected virtual async Taskawait解决了这个问题,但我不确定它是否是最好的解决方案。如果我使用这个解决方案,那么在任务完成之前就会显示消息"End Procces"。

等待抽象函数完成c#

我需要等待它结束并显示一条消息"结束进程…",我该如何解决这个问题?

您将那些已执行的Task公开给调用者。您也不通过构造函数调用它们,而是通过初始化方法:

protected abstract Task FirstMethodAsync(string var1, string var2);
protected abstract Task SecondMethodAsync(int var1, int var2);
public async Task InitializeAsync()
{
     Console.WriteLine("Start Process ABSMethod1");
     await FirstMethodAsync("var1", "var2");
     Console.WriteLine("End Process ABSMethod1");
     Console.WriteLine("Start Process ABSMethod2");
     await SecondMethodAsync(1, 2);
     Console.WriteLine("End Process ABSMethod2");
}