Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Task.Run无法处理等待的方法_C#_Asp.net Core_Asynchronous_Salesforce - Fatal编程技术网

C# Task.Run无法处理等待的方法

C# Task.Run无法处理等待的方法,c#,asp.net-core,asynchronous,salesforce,C#,Asp.net Core,Asynchronous,Salesforce,我们遇到了这样一种情况,即在调用过程中需要启动和执行几个启动和遗忘线程。但是,如果异步方法有任何等待的调用,我们的调用将无法执行 这里有一个例子。我们错过什么了吗 public class SomeClass { public async Task Test() { //Calling synchronously this things works await Save(1).ConfigureAwait(false); awai

我们遇到了这样一种情况,即在调用过程中需要启动和执行几个启动和遗忘线程。但是,如果异步方法有任何等待的调用,我们的调用将无法执行

这里有一个例子。我们错过什么了吗

public class SomeClass
{

    public async Task Test()
    {
        //Calling synchronously this things works
        await Save(1).ConfigureAwait(false);
        await Save(2).ConfigureAwait(false);
        await Save(3).ConfigureAwait(false);

        //Starting three threads at the same time fails while trying to run var queryResult = await SomeClient.QueryAsync<T>(q).ConfigureAwait(false);
        _ = Task.Run(async () => await Save(1));
        _ = Task.Run(async () => await Save(2));
        _ = Task.Run(async () => await Save(3));
    }

    public async Task<bool> Save(int ct)
    {
        var x = await Update(ct).ConfigureAwait(false);

        return x;
    }

    public async Task<bool> Update(int ct)
    {

        await _someObject.CallingSomeAsyncMethod<dynamic>("Some Query").ConfigureAwait(false);

        await _someObject.CallingSomeAsyncMethod<dynamic>("Some Query").ConfigureAwait(false);

        await _someObject.CallingSomeAsyncMethod<dynamic>("Some Query").ConfigureAwait(false);

        return true;
    }
}

public class SomeObject
{

    public async Task<T> CallingSomeAsyncMethod(string q)
    {
        await Task.Delay(1000).ConfigureAwait(false);
        //OR Any async method which is awaited here just stops the execution

        return queryResult;
    }
}
公共类SomeClass
{
公共异步任务测试()
{
//同步调用这些东西是有效的
等待保存(1)。配置等待(false);
等待保存(2)。配置等待(false);
等待保存(3)。配置等待(false);
//尝试运行var queryResult=await SomeClient.QueryAsync(q).ConfigureAwait(false)时,同时启动三个线程失败;
_=Task.Run(异步()=>等待保存(1));
_=Task.Run(异步()=>等待保存(2));
_=Task.Run(异步()=>等待保存(3));
}
公共异步任务保存(int-ct)
{
var x=等待更新(ct)。配置等待(false);
返回x;
}
公共异步任务更新(int-ct)
{
wait _someObject.callingsomeasynchmethod(“某些查询”).configurewait(false);
wait _someObject.callingsomeasynchmethod(“某些查询”).configurewait(false);
wait _someObject.callingsomeasynchmethod(“某些查询”).configurewait(false);
返回true;
}
}
公共类对象
{
公共异步任务调用SomeAsyncMethod(字符串q)
{
等待任务。延迟(1000)。配置等待(false);
//或者这里等待的任何异步方法都只是停止执行
返回查询结果;
}
}

如果要同时运行多个任务,则应在不使用
等待
的情况下调用这些方法并保持任务。然后您可以执行
wait Task.whalll(task1、task2、task3,…)

By无法执行,您的意思是该方法甚至没有被调用吗?如果在
Save
中放置断点,它是否会被命中?Save()会被调用,但它会在等待某个客户端后停止执行。querysync(q)。ConfigureAwait(false);第一根线是热的。另一个问题是我无法捕获任何错误。从不到达catch块(如果在queryAsync方法上放置了一个try catch,那么queryAsync方法是什么样子的?您是否有任何
wait
s在那里,或者您只是开始任务并返回它?老实说,我无法通过将queryAsync替换为例如task.Delay()来重现您的情况)。我可以捕获异常,所有代码都可以正常运行。您的第三方库中一定发生了某种挂起,可能它无法连接,只是在等待超时。如何调用
Test
?我们不希望同时运行一组任务。示例来自一个测试类。我们必须在每个测试时在单独的线程上运行k run来自UIK如果你“必须”在不同的线程上运行它们,你就不应该使用TPL。不能保证有新的线程。我们应该使用什么?