相关疑难解决方法(0)

异步/等待简单的例子

我试图通过创建一个简单的例子来理解async/await的基础知识.我使用Sqlite与Async连接,我有一个这样的类:

public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

现在让我们说我要保存User到我的UserTable,当保存完成后,我希望检索它.

public async ? SaveToDb()
        {
            _conn.CreateTableAsync<User>();
            await _conn.InsertAsync(new User(){Id=1, Name = "Bill"});

            //Code that waits for the save to complete and then retrieves the user
        }
Run Code Online (Sandbox Code Playgroud)

我怀疑我需要某个任务,但我不完全确定如何做到这一点.谢谢

c# asynchronous async-await

4
推荐指数
1
解决办法
4674
查看次数

当你使用async-await时,我在哪里定义Task以及我等待它的位置是否重要?

我正在看示例方法

public async Task MyMethodAsync()
{
    Task<int> longRunningTask = LongRunningOperationAsync();
    // independent work which doesn't need the result of LongRunningOperationAsync can be done here

    //and now we call await on the task 
    int result = await longRunningTask;
    //use the result 
    Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)

How和何时使用`async`和`await`,我有一个关于它是如何工作的问题.

所以,我想说我可以添加一些"独立工作".

public async Task MyMethodAsync()
{
    Task<int> longRunningTask = LongRunningOperationAsync();
    int millionthPrimeNumber = GetMillionthPrimeNumber();
    int result = await longRunningTask;
    //use the result 
    Console.WriteLine(result % millionthPrimeNumber);
}
Run Code Online (Sandbox Code Playgroud)

获得百万分之一的素数是独立的工作,所以我希望它是夹在Task<int> longRunningTask = LongRunningOperationAsync();和之间的东西int result = …

.net c# asynchronous async-await

3
推荐指数
1
解决办法
270
查看次数

在异步功能中我为什么要等待?

说我有这样的方法:

private async Task SomeMethod()
{
  await DoSomethingAsync();
  await DoSomethingElseAsync();
  return;
}
Run Code Online (Sandbox Code Playgroud)

鉴于DoSomethingElseAsync返回a Task,您似乎应该能够这样做:

private async Task SomeMethod()
{
  await DoSomethingAsync();
  return DoSomethingElseAsync();
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨这个:

由于' SomeMethod'是一个返回' Task' 的异步方法,因此返回关键字后面不能跟一个对象表达式.你有意回来' Task<T>'吗?

这是为什么?

c# async-await

3
推荐指数
1
解决办法
176
查看次数

在延迟之前长时间运行的异步方法会发生什么?

我有一种方法可以每秒向我的服务器发送请求。

public async Task StartRequestProcess(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCanecllationRequested)
    {
       var result = await GetDataFromServerAsync();
       await Task.Delay(1000, stoppingToken);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的GetDataFromServerAsync()方法有时需要 10 或 15 秒。

这段时间(10 或 15 秒)有什么作用?

进程会等到完成长请求吗?还是每秒都会发送新请求而无需等待?

c# task-parallel-library async-await

3
推荐指数
1
解决办法
232
查看次数

JavaScript 中的异步函数是什么?JavaScript 中的“async”和“await”是什么?

本问答旨在明确回答以下问题:

  • JavaScript 中的异步函数是什么,我们何时以及如何使用它们?
  • JavaScript中的async,await关键字是什么,它们与异步函数有什么关系?

要遵循答案,需要以下先决条件:

  • JavaScript 异步编程模型的知识
  • ES6 Promise 对象知识

javascript asynchronous promise async-await es6-promise

3
推荐指数
1
解决办法
556
查看次数

异步等待行为

我正在试验 async-await 并且我遇到了这种相当奇怪的行为,至少对我来说是这样。
我创建了三种模拟长时间运行任务的方法。
考虑两个按钮单击处理程序:
对于 button1_click,经过的时间约为 6000 毫秒,而 button2_click 约为 3000 毫秒。
我无法理解为什么会发生这种情况,即 6000 毫秒与 3000 毫秒。

    private async Task<string> TaskOne()
    {
        await Task.Delay(1000);
        return "task one";
    }

    private async Task<string> TaskTwo()
    {
        await Task.Delay(2000);
        return "task two";
    }

    private async Task<string> TaskThree()
    {
        await Task.Delay(3000);
        return "task three";
    }
    
    //time elapsed = 6000+ms
    private async void button1_Click(object sender, EventArgs e)
    {
        var watch = new Stopwatch();
        watch.Start();

        await TaskOne();
        await TaskTwo();
        await TaskThree();
        
        watch.Stop();
        textBox3.Text = watch.ElapsedMilliseconds.ToString();
    } …
Run Code Online (Sandbox Code Playgroud)

c# async-await

3
推荐指数
2
解决办法
96
查看次数

使用 async/await 的技巧

最近几天我一直在阅读C# 异步编程。原因是 UWP 中的文件选择器(这是必要的,因为我正在 Unity 中为 Hololens 2 编程)。尽管有很多来源,即123,但我对正确使用有一些理解问题,也许这里有经验的用户可以给我一些提示。

我正在尝试做的一个例子:

程序开始:

public class SceneUIHandler : MonoBehaviour
{
  openFile()
  {
    pickFile(); // calls await filepicker.PickSingleFileAsync();
    loadData(path); // calls FileLoader.loadFile with path from filepicker for the reader
    showData(); // should display the data
  }
}
Run Code Online (Sandbox Code Playgroud)

装载机:

public class FileLoader:
    {
      async void loadFile(string path)
      {
        Task<StreamReader> streamReaderTask = getStreamReader(filePath);
        StreamReader sr = await streamReaderTask;
        // after that read file with the StreamReader...
        ...
      } …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine async-await uwp hololens

2
推荐指数
1
解决办法
1043
查看次数

wait 会使异步代码同步吗?

我正在学习异步和等待在编程中如何工作。我在互联网上看到这个例子,说这是异步代码:

class Program
{
    static async Task Main(string[] args)
    {
        Method2();
        var count = await Method1();
        Method3(count);
        Console.ReadKey();
    }

    static async Task<int> Method1()
    {
        int count = 0;
        await Task.Run(() =>
        {
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine(" Method 1");
                count += 1;
            }
        });
        return count;
    }

    static void Method2()
    {
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine(" Method 2");
        }
    }

    static void Method3(int count)
    {
        Console.WriteLine("Total count is …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await

2
推荐指数
1
解决办法
182
查看次数

在这做什么等待?

给定方法签名:

(awaitable) Task<Token> ITokenService.GetAPIToken();
Run Code Online (Sandbox Code Playgroud)

在这种方法中发生了await什么?

public async Task<User> GetUser(string userId)
{
    Token token = await TokenService.GetAPIToken();

    //..........
}
Run Code Online (Sandbox Code Playgroud)

我的理解:GetAPIToken调用并且当前的method(GetUser)返回一个Task<User>对象(稍后提供一个User对象).只有GetAPIToken方法返回后,当前方法的执行才会继续.

如果我错了,token代码等待GetAPIToken()返回方法时的类型/值是什么?

我知道调用此方法的结果会有所不同,因为它可以使用或不使用await关键字调用.对于帖子,请假设它正在被调用await.

c# async-await

1
推荐指数
1
解决办法
246
查看次数

为什么我要使用异步而不是非异步方法

我不明白,我已经看到有提供多种方法的.Net Framework同时具有asyncnon-async变种。

我的问题是,async给定以下约束,一种方法对我有什么好处:-我将不会Task.Result以同一方法多次提取
-我没有使用CPU-bound任务(Task.Run(...)

我在MVC控制器中,我想处理一个post请求:

 [HttPost]
 [Route(..)]
 public async Task DoSomething(MyModel model)
 {  
    var asyncResult=await NETMethodAsync(model); //PostAsync,WriteAsync....
    var nonAsyncResult= NETMethod(model); //Post,Write,....etc..
    return result;
 }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我将result只在方法中使用一次,而不会多次要求它(哪里await会给我完成的任务结果)有什么区别?我基本上是StateMachineMethodAsync为什么创建一个?我non-async想我可以更快地进行手术。

如果我没有在另一个方法上委托方法 Task(如下所示),为什么要使用async版本?我问是因为即使MVC Controller默认情况下模板也提供CRUD使用这些async版本的所有操作。

Task tsk=Task.Run(async()=> await MethodAsync() );
Run Code Online (Sandbox Code Playgroud)

PS在我的情况下是我想念的东西。使用async(内部旋转状态机)更快,然后使用非异步版本吗?

asp.net-mvc asynchronous task-parallel-library .net-core

1
推荐指数
1
解决办法
168
查看次数