Revised Answer:
Heres what I would do if I were you
Trigger
trigger TestTaskTrigger on Task (before insert) {
if(trigger.isInsert && trigger.isBefore){
Task_Methods.setWhat(trigger.new);
}
}
Class
public class Task_Methods{
public static void setWhat(List<Task> newList){
List<Task> tList = new List<Task>();
Map<Id,Contact> contactMap = new Map<Id,Contact>([SELECT Id, AccountId FROM Contact WHERE AccountId != null]);
for(Task t : newList){
if(contactMap.get(t.WhoId) != null){
t.WhatId = contactMap.get(t.WhoId).AccountId;
}
}
}
}