gpt4 book ai didi

c# - 如何在以下场景中使用线程或任务模式

转载 作者:行者123 更新时间:2023-11-30 19:41:03 25 4
gpt4 key购买 nike

我有两个方法在 Main 方法中使用,就像这样

public bool isBadMethod() 
{
bool isBad = Method1();
if(isBad) return true;
else return Method2();
}

bool Method1() { ..... return true or false }
bool Method2() { ..... return true or false }

如果 Method1 或 Method2 中的任何一个返回 true,则无需检查其他方法,我们可以将 MainMethod 返回为 true。但是如果第一个方法返回 false 则需要检查第二个方法并最终返回第二个方法返回的任何内容。这里Method1和Method2是耗时的方法。我可以在这些方法上使用异步编程吗?求助怎么办。 (我正在使用 .net 4.0)

最佳答案

你可以只使用表达式的短路:

bool val = Method1() || Method2();

如果 Method1 返回 true,则不会使用第二种方法。

显然,如果方法调用开销很大,则继续执行任务路由,因为这不是并行执行。我只是发布这个以防它是 XY 问题。


使用任务,这可能是您想要的。它将运行这两种方法,然后只使用一个表达式来获取正确的结果。在本例中,它等待整整 3 秒以获取 Method2 的结果。这也取消。我不确定使用的类型是否是最佳实践,因为我对此的经验不完整,但它在我的沙箱中完成了工作:

internal class Program
{
private static void Main(string[] args)
{
var cm2 = new CancellationTokenSource();

var m1 = Task.Factory.StartNew(() => Method1());
var m2 = Task.Factory.StartNew(() => Method2(cm2.Token), cm2.Token);

var val = m1.Result || m2.Result;

cm2.Cancel();

Console.WriteLine(val);
Console.ReadLine();
}

private static bool Method1()
{
Thread.Sleep(1000);
Console.WriteLine(1);
return true;
}

private static bool Method2(CancellationToken token)
{
Thread.Sleep(3000);

if (token.IsCancellationRequested)
return false;

Console.WriteLine(2);
return true;
}
}

正如 Matthew Watson 在评论中指出的那样,Method2 需要使用取消 token 才能真正“取消”。在我的示例中,它只是停止打印数字并提前返回。

关于c# - 如何在以下场景中使用线程或任务模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com