¿Es correcto esperar la misma tarea de varios subprocesos? ¿Es seguro esperar el subproceso?

¿Es seguro esperar el hilo? Parece que la clase de tarea es segura para subprocesos, así que supongo que esperarla también es segura para subprocesos, pero no he encontrado confirmación en ninguna parte. También es la seguridad de subprocesos un requisito para un moderador personalizado. Me refiero a los métodos IsCompleted, GetAwaiter, etc. Es decir. Si esos métodos no son seguros para subprocesos, ¿será seguro para subprocesos? Sin embargo, no espero necesitar un camarero personalizado pronto.

Un ejemplo de escenario de usuario: Digamos que tengo una tarea en segundo plano que devuelve un resultado de forma asíncrona, que luego se usa desde varios subprocesos:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace scratch1
{
    class Foo
    {
        Task<int> _task;

        public Foo()
        {
            _task = Task.Run(async () => { await Task.Delay(5000); return 5; });
        }

        // Called from multiple threads
        public async Task<int> Bar(int i)
        {
            return (await _task) + i;
        }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            Foo foo = new Foo();

            List<Task> tasks = new List<Task>();
            foreach (var i in Enumerable.Range(0, 100))
            {
                tasks.Add(Task.Run(async () => { Console.WriteLine(await foo.Bar(i)); })); 
            }

            Task.WaitAll(tasks.ToArray());
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta