Still trying to wrap my head around async/await. I have the following method for drag/drop loading:

```
    private async void p_DragDrop(object sender, DragEventArgs e)
    {
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

        List<string> CurvesToLoad = new List<string>();
        List<string> TestsToLoad = new List<string>();

        foreach (string file in files)
        {
            if (file.ToUpper().EndsWith(".CCC"))
                CurvesToLoad.Add(file);
            else if (file.ToUpper().EndsWith(".TTT"))
                TestsToLoad.Add(file);
        }

        //SNIPPET IN BELOW SECTION
        foreach (string CurvePath in CurvesToLoad)
        {
            Curve c = new Curve(CurvePath);

            await Task.Run(() =>
            {
                c.load();
                c.calculate();
            });

            AddCurveControls(c);
        }
        //END SNIPPET

        foreach (string TestPath in TestsToLoad)
        {
            Test t = new Test(TestPath);

            await Task.Run(() =>
            {
                t.load();
            });

            AddTestControls(t);
        }
    }

```

It is non-blocking as I expected - I am able to navigate between tabs of the TabControl as multiple items are loaded and I can see each tab pop up as it complete loading.

I then tried to convert to this:

```
    private Task<Curve> LoadAndCalculateCurve(string path)
    {
        Curve c = new Curve(path);

        c.load();
        c.calculate();

        return Task.FromResult(c);
    }

```

And then replace the marked snippet from the first code block with:

```
    foreach (string CurvePath in CurvesToLoad)
    {
        Curve c = await LoadAndCalculateCurve(CurvePath);
        AddCurveControls(c);
    }

```

And it becomes blocking - I can't navigate through tabs as it's loading, and then all of the loaded items appear at once when they are completed. Just trying to learn and understand the differences at play here - many thanks in advance.

EDIT:

Updated LoadAndCalculateCurve():

```
    private async Task<Curve> LoadAndCalculateCurve(string path)
    {
        Curve c = new Curve(path);

        await Task.Run(() => {
            c.load();
            c.calculate();
        });

        return c;
    }

```