Для асинхронных методов:
Если метод возвращает результат используется Task<TResult> (где TResult - тип результата). Если метод не возвращает результатов, то используется Task.
Не прямые а отрезки (из которых состоят треугольники)
"Алгоритмы. Построение и анализ" Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн
33.2 Определение наличия пересекающихся отрезков